Eu quero executar um código powershell com um arquivo em lotes para tirar uma captura de tela da minha área de trabalho que encontrei aqui Faça uma captura de tela da área de trabalho de um usuário com o PowerShell .
Então, quando eu o executo como script powershell, ele funciona sem nenhum erro e funciona para mim 5/5, mas quando eu o tomo como arquivo de lote como esse, recebi esse tipo de erro que não sei como depurá-lo corretamente?
Error "TerminatorExpectedAtEndOfString"
Então, se alguém pode me explicar por que e de onde vem esse erro?
Aqui está o meu código de lote:
@echo off
Title Get a ScreenShot with Batch and Powershell
Call :ScreenShot
pause
::----------------------------------------------------------------------------------------------------------------------------
:ScreenShot
Powershell ^
$Path = "E:\ScreenCapture\";^
Add-Type -AssemblyName System.Windows.Forms;^
$screen = [System.Windows.Forms.Screen]::PrimaryScreen.Bounds;^
$image = New-Object System.Drawing.Bitmap($screen.Width, $screen.Height);^
$graphic = [System.Drawing.Graphics]::FromImage($image);^
$point = New-Object System.Drawing.Point(0,0);^
$graphic.CopyFromScreen($point, $point, $image.Size);^
$cursorBounds = New-Object System.Drawing.Rectangle([System.Windows.Forms.Cursor]::Position,[System.Windows.Forms.Cursor]::Current.Size);^
[System.Windows.Forms.Cursors]::Default.Draw($graphic, $cursorBounds);^
$FileName = (Get-Date -F dd-MM-yyyy_HH_mm_ss)+".jpg";^
$FilePath = $Path$FileName;^
$FormatJPEG = [System.Drawing.Imaging.ImageFormat]::jpeg;^
$image.Save($FilePath,$FormatJPEG)
Exit /B
::------------------------------------------------------------------------------------------------------------------------
O erro vem desta linha:
Você não deve concatenar variáveis para formar um caminho de arquivo como esse.
Funcionaria se você o colocasse entre aspas duplas assim:
$FilePath = "$Path$FileName";^
, mas muito melhor é usar o cmdlet Join-Path :ou se preferir usar .Net diretamente:
Pode ser que você precise:
Usar
^
em)
Substituir
"
para'
dentro$var='value'
Use To.String em
$((Get-Date).ToString('dd-MM-yyyy_HH_mm_ss')+'.jpg')
Teste-o em sua linha de comando:
Teste-o em seu arquivo bat: