我正在嘗試將.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嗯......我期望解析器認識到命令在下一行繼續,因爲只有參數被包裝,但顯然它不在這種情況下。恢復該修復。 –