powershell を使用して、フォルダー内の特定の種類のすべてのファイルに対してプログラムを実行しようとしていました。
最初に、フォルダー内のすべてのファイルの種類をループできるかどうかを確認するテストを行い、次のように書きました。
$files = ls *.inp
foreach ($file in $files) {echo $file.basename}
どの出力:
myfile1.inp
myfile2.inp
myfile3.inp
ここまでは順調ですね。さて、この次のビットを for ループに入れたとき、うまくいきませんでした:
$files = ls *.inp
foreach ($file in $files) {myProgram arg1=$file.basename}
myProgram へのパスは既にパス変数の一部になっているため、myProgram.exe へのフル パスを記述する必要はなく、myProgram と記述するだけでよいことに注意してください。また、arg1 = 処理したいファイル。
何が起こっているのかを確認したかったので、ループ内で上記のコマンドをエコーしました。
foreach ($file in $files) {echo myProgram arg1=$file.basename}
...出力:
myProgram arg1=myfile.inp.basename
したがって、何らかの理由で、ベース名メソッドは、2 番目のシナリオで私が望んでいることを実行していません。
スクリプトを次のように変更しましたが、問題なく動作します。
foreach ($file in $files) {echo myProgram arg1=$file}
私の質問は、$file.basename が 2 つのシナリオで異なるものを出力するのはなぜですか? 2 番目の状況でのみベース名を使用したい場合、どうすればよいですか?
ありがとう!