Можно ли изменить текстовый файл на пакетный, выполнить его, а затем вернуть его обратно в текст в сценарии powershell? - PullRequest
0 голосов
/ 10 мая 2019

Цель: Написать скрипт powershell, чтобы изменить файл с .txt на .bat, выполнить пакетный файл и затем преобразовать его обратно в .txt.

Что я пробовал:

Write-Host "Renaming $($PatchPath)$($FileName) to LivePatch.bat"
Rename-Item "$($PatchPath)$($FileName)" "LivePatch.bat"

Write-Host "Running $($PatchPath)LivePatch.bat"
Start-Process "$($PatchPath)LivePatch.bat" 3>&1 2>&1 > "$($PatchPath)\results.txt"

Write-Host "Returning $($PatchPath)LivePatch.bat to it's original name: $($FileName)."
Rename-Item "$($PatchPath)LivePatch.bat" "$($FileName)"

Где $PatchPath = "D:\Patches\" и $FileName = "LivePatch.txt.

Проблема: Это преобразует файл в пакет,как я вижу из просмотра проводника во время выполнения, но когда он пытается выполнить его, он возвращает следующее:

'"D:\Patches\LivePatch.bat"' is not recognized as an internal or external command,
operable program or batch file.

Я проверил и убедился, что могу выполнять пакетные сценарии, как будто я пытаюсьвыше с пакетными сценариями, которые уже существуют и которые отлично работают.

Старое рабочее решение: Это пакетный сценарий, который я использовал для этой цели, и предполагается, что этот сценарий powershell должензаменить:

REM rename %PatchPath%%FileName% "LivePatch.bat"
rename %PatchPath%%FileName% "LivePatch.bat"
REM Run Live Patch file %PatchPath%LivePatch.bat
REM call %PatchPath%LivePatch.bat > "%PatchPath%results.txt" 2>&1 
call %PatchPath%LivePatch.bat > "%PatchPath%results.txt" & type "%PatchPath%results.txt"

rename "%PatchPath%LivePatch.bat" "%FileName%"

1 Ответ

0 голосов
/ 10 мая 2019

Вместо того чтобы полагаться на сон, как вы упоминали, я бы проверил, существует ли файл первым.

Write-Host "Renaming $($PatchPath)$($FileName) to LivePatch.bat"
Rename-Item "$($PatchPath)$($FileName)" "LivePatch.bat"

if([System.IO.File]::Exists("$($PatchPath)LivePatch.bat")){ 
    Write-Host "Running $($PatchPath)LivePatch.bat"
    Start-Process "$($PatchPath)LivePatch.bat" 3>&1 2>&1 > "$($PatchPath)\results.txt"

    Write-Host "Returning $($PatchPath)LivePatch.bat to it's original name: $($FileName)."
    Rename-Item "$($PatchPath)LivePatch.bat" "$($FileName)"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...