是否可以将文本文件更改为批处理、执行,然后在powershell脚本中将其还原为文本?

是否可以将文本文件更改为批处理、执行,然后在powershell脚本中将其还原为文本?,powershell,batch-file,cmd,Powershell,Batch File,Cmd,目标:编写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 "$($P

目标:编写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%"

我将首先测试文件是否存在,而不是像您提到的那样依赖睡眠

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

使用调用操作符
&
调用批处理脚本有什么原因不能只复制一个后缀为.bat的.txt文件,执行它,然后删除副本吗?这里有竞态条件。在
cmd
实际读取它之前,您可以将文件重命名回
.txt
。我在重命名和删除之间睡了一秒钟执行并解决了问题,这是坏做法吗?