首页 > 解决方案 > 是否可以将文本文件更改为批处理,执行它,然后将其恢复为 powershell 脚本中的文本?

问题描述

目标:编写一个powershell脚本将文件从a更改.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%"

标签: powershellbatch-filecmd

解决方案


而不是像你提到的那样依赖睡眠,我会先测试文件是否存在。

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)"
}

推荐阅读