Команда будет выполнена, если поместить ее прямо в powershell, однако, если я попытаюсь запустить ее с тегом powershell -Command в файле bat, я получу следующую ошибку?
Выполнение команды:
powershell -Command $tempFilePath = "$env:TEMP\$($filePath ^| Split-Path -Leaf)"
Получена ошибка:
В строке: 1 символ: 26
+ $tempFilePath = $env:TEMP\$($filePath ^| Split-Path -Leaf)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Unexpected token '\$($filePath ^| Split-Path -Leaf)' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
Я был бы признателен за любую помощь, если вам нужна дополнительная информация, пожалуйста, спросите. Спасибо.
Код из комментария $filePath = 'filedir/file.conf.js'
$tempFilePath = "$env:TEMP\$($filePath | Split-Path -Leaf)"
$find = 'texttochange'
$replace = 'newtext'
(Get-Content -Path $filePath) -replace $find, $replace | Add-Content -Path $tempFilePath
Remove-Item -Path $filePath
Move-Item -Path $tempFilePath -Destination $filePath
Новая ошибка, как указано в комментариях:
Add-Content : Cannot find drive. A drive with the name '$env' does not exist.
At line:1 char:227
+ ... h) -replace $find, $replace | Add-Content -Path $tempFilePath; Remove ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: ($env:String) [Add-Content], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.AddContentCommand
Move-Item : Cannot find drive. A drive with the name '$env' does not exist.
At line:1 char:289
+ ... -Path $filePath; Move-Item -Path $tempFilePath -Destination $filePath
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: ($env:String) [Move-Item], DriveNotFoundException
+ FullyQualifiedErrorId : DriveNotFound,Microsoft.PowerShell.Commands.MoveItemCommand
Полная команда, которая выполняется в моей летучей мыши файл, который выдает ошибку выше:
powershell -Command $filePath = 'filedir/file.conf.js'; "$tempFilePath = '$env:TEMP\$($filePath ^| Split-Path -Leaf)'"; $find = 'texttochange'; $replace = 'newtext'; (Get-Content -Path $filePath) -replace $find, $replace ^| Add-Content -Path $tempFilePath; Remove-Item -Path $filePath; Move-Item -Path $tempFilePath -Destination $filePath
Обходной путь, который работал для меня, я поместил все свои команды powershell в файл ps1 и вызвал его из файла bat, это сработало, как показано ниже. Содержимое файла pshellfile.ps1:
$filePath = 'filedir/file.conf.js'
$tempFilePath = "$env:TEMP\$($filePath | Split-Path -Leaf)"
$find = 'texttochage'
$replace = 'newtext'
(Get-Content -Path $filePath) -replace $find, $replace | Add-Content -Path $tempFilePath
Remove-Item -Path $filePath
Move-Item -Path $tempFilePath -Destination $filePath
Это команда из моего файла bat:
powershell.exe -ExecutionPolicy ByPass -File pshellfile.ps1