1つのコマンドラインでローカルパスをUNCパスに変換します。これを行うにはCMD遅延評価(文字列置換)+ "&"を含む1行の複数のコマンド
、私は、コマンドライン引数としての私の%output%
を渡し、\\%ComputerName%\c$
と私のローカルパスでC:
を交換して、"\\Server\Resources\FileReceiver.exe" "%output%"
と私のネットワークリソースを呼び出すために願っています。
私はこのようになります作業ProofOfConcept.cmdファイルがあります:
SET "output=C:\MyFile.txt"
CALL SET output=%%output:C:=\\%ComputerName%\c$%%
"\\Server\Resources\FileReceiver.exe" "%output%"
pause
出力:
C:\>SET "output=C:\MyFile.txt"
C:\>CALL SET output=%output:C:=\\%ComputerName%\c$%
C:\>"\\Server\Resources\FileReceiver.exe" "\\PC-01\c$\MyFile.txt"
FileReceiver Util v1.0.3.94365
accepting \\PC-01\c$\MyFile.txt...
FileReceiver.exe exited on Server exited with error code 0.
C:\>pause
Press any key to continue . . .
だから、これは動作しますが、私の特定のユースケースのために、私は連結する必要がコマンドを1つの実行可能な行に置き換えます。したがって、改行を&
と私のProofOfConcept.cmdに置き換えると、次のようになります。
SET "output=C:\MyFile.txt" & CALL SET output=%%output:C:=\\%ComputerName%\c$%% & "\\Server\Resources\FileReceiver.exe" "%output%"
しかし、その代わりにフォーマットされたパスでは、%出力%は現在、空の文字列(「」)である:私は間違っ
C:\>SET "output=C:\MyFile.txt" & CALL SET output=%output:C:=\\%ComputerName%\c$% & "\\Server\Resources\FileReceiver.exe" "" & pause
Press any key to continue . .
何をしているのですか?私の.cmdファイルに2行目を追加すると、echo %output%
という値が得られますが、最初の行では評価されません。私は怠惰な評価+スレッディングに関する何かを推測していますが、解決する方法がわかりません。最初の実行行全体を文字列で置換してから、それを呼び出す必要がありますか?
感謝します!コマンドのCALLを実行すると、%output%を%% output %%に置き換えたコードが表示されます。これは、怠惰なパーサに必要です。他の人の答えを指摘するうえで参考になるかもしれません。 – TaterJuice