Проблемы с запуском команды powershell через bat-файл - PullRequest
0 голосов
/ 24 января 2020

Команда будет выполнена, если поместить ее прямо в 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

1 Ответ

0 голосов
/ 25 января 2020

WRT первоначальный вопрос, получение правильных магов c в строке cmd.exe для запуска PowerShell может разочаровать.

SET "FILEPATH=C:\src\t\xxx.txt"
powershell -NoLogo -NoProfile -Command "Join-Path $($Env:TEMP) $('%FILEPATH%' | Split-Path -Leaf)"

Производит:

C:\Users\lit\AppData\Local\Temp\xxx.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...