我正在尝试将.cmd批处理文件重写为PowerShell .ps1文件。但我在Move-Item
命令失败,我不知道为什么。也许有人可以指出我正确的方向?一次移动具有不同扩展名的文件
批.cmd文件(一切正常):
cd ../Grammar
java -jar ..\Tools\antlr-4.7-complete.jar ClarionLexer.g4 -Dlanguage=JavaScript
java -jar ..\Tools\antlr-4.7-complete.jar ClarionExprParser.g4 -visitor -no-listener -Dlanguage=JavaScript
MOVE /Y *.js ..\JavaScript\src\Generated
MOVE /Y *.tokens ..\JavaScript\src\Generated
cd ../JavaScript
的PowerShell脚本名为.psl(不移动文件):
Set-Location -Path ..\Grammar -PassThru
Start-Process java.exe -ArgumentList '-jar', '..\Tools\antlr-4.7-complete.jar ClarionLexer.g4 -Dlanguage=JavaScript ClarionExprParser.g4 -visitor -no-listener -Dlanguage=JavaScript'
Get-ChildItem -Recurse -Path ..\Grammar | Where {($_.Extension -eq '.js') -or ($_.Extension -eq '.tokens')} | Move-Item -Destination ..\JavaScript\src\Generated
Set-Location ../JavaScript -PassThru
#Read-Host -Prompt "Press Enter to exit"
UPDATE:
我现在已决定逐行运行命令: 在我开始之前,我只在我的语法文件夹中有两个文件:ClarionExprParser和ClarionLexer。
运行仅这一部分:
Set-Location -Path ..\Grammar -PassThru
Start-Process java.exe -ArgumentList '-jar', '..\Tools\antlr-4.7-complete.jar ClarionLexer.g4 -Dlanguage=JavaScript ClarionExprParser.g4 -visitor -no-listener -Dlanguage=JavaScript'
我现在已经在我的语法文件夹另外下列文件:ClarionExprParser.js,ClarionExprParser.tokens,ClarionExprParserVisitor.js,ClarionLexer.js,ClarionLexer.tokens 是手段该命令正常工作。
下运行的第二部分:
Get-ChildItem -Recurse -Path ..\Grammar | Where {($_.Extension -eq '.js') -or ($_.Extension -eq '.tokens')} | Move-Item -Destination ..\JavaScript\src\Generated -Force
Set-Location ../JavaScript -PassThru
作品也正常。
但是,当我把所有东西放在一起它不能正确工作100%。它接近仿佛它复制文件。这些文件不会从文件夹语法中移出,但会被复制到Generated文件夹中。
也许问题在于命令Move并未等待Start-Process命令完成。
你已经把'-Destination'为'移动-Item'的下一行,但现在您的脚本已经在您的原始文章之外进行了编辑,我不知道@Ansgar是否已解决您的问题。重新发布前请重新尝试。 – Compo
首先,批处理脚本启动2个Java进程,而您的PowerShell脚本仅启动(或尝试启动)只有一个组合了所有参数的脚本。您是否验证过要移动的文件是否正确生成?你究竟“在”Move-Item'命令中“如何?”? –
@compo嗯......我期望解析器认识到命令在下一行继续,因为只有参数被包装,但显然它不在这种情况下。恢复该修复。 –