1

はい、これらのファイルにはファイル名に引用符が含まれています.!!

powershell スクリプトを使用してバット ファイルを実行しようとしています。Powershell スクリプトは、フォルダーを反復処理してファイルを抽出します。次に、これらのファイル名を、exe を呼び出して処理するバッチ スクリプトに渡します。

これは、powershell スクリプトがどのように見えるかです。

$path = "\\RemoteMachine\Japanese\files"
$filter = "*.msg"
$count = 0

Write-Host "Parsing started...";
get-childitem -recurse -path $path -filter $filter| % {
    $count++;
    & "C:\Users\uname\myfolder\runCommads.bat" "$($_.FullName)" "C:\Users\uname\myfolder\output\$count.txt"

}

入力ファイルは別の言語を使用して書かれています。一部のファイルの名前は引用符で構成されています。PS スクリプトが runCommand.bat を実行すると、ファイル名に含まれるスペースが誤って解釈されます。スペースに続く Word は、別のファイルの名前と見なされます。

しかし、PS スクリプトを使用せずにバッチ ファイルを実行すると、ファイル名に引用符が含まれているファイルが 1 つだけで、予想される結果が得られます。

誰かがこの問題の解決策を手伝ってくれませんか? ありがとうございました

4

1 に答える 1

1

これは、powershell スクリプトの問題ではなく、バッチ ファイルの問題のようです。

通常、バッチ パーサーはパラメーターをスペースで分割します。
引用符を使用して抑制できますが、ファイル名自体に引用符が含まれていると、再び失敗します。

ただし、ファイル名 (powershell スクリプト内) のすべての引用符を二重にすることができ
ます。そうすれば、バッチ ファイルで正しいファイル名を取得できるはずです。

バッチ内で二重引用符を削除する必要がありますが、それは簡単なようです。

set "filename=%~1"
setlocal EnableDelayedExpansion
set "filename=!filename:""="!"

しかし、ほとんどのバッチ コマンドは、そのようなファイル名では失敗すると思います。

于 2012-06-15T11:57:10.973 に答える