Windowsのコマンドラインで米国42州に対して42回別々に実行可能ファイル(C#で書かれたもの)を実行する必要があります。私はプロセスを自動化するバッチファイルを書いた。実行可能ファイルへの1番目のユーザー入力は1、2番目は状態の省略形(AL、AZ、CTなど)です。私はそれを行うには、次のスクリプトを書いた:Windowsのバッチスクリプトでデータをパイプする際に余分な空白を避ける
AL
AZ
CT
を次のように
@echo off
for /f "tokens=1 delims=" %%x in (CropHailStates.txt) do (
(echo 1 & echo %%x)|Z:\Models\LossCalc.exe
)
はCropHailStates.txtファイルの各行には、州の略称が含まれています現在、手動モードでは、1番目のプロンプトで1を入力し、2番目にALを入力すると、C#プログラムは "AL.Even.CropLoss.csv"という名前のファイルを読み込みます。しかし、バッチスクリプトを実行して自動的に実行すると、 "AL.Even.CropLoss.csv"というファイルが見つからないというエラーメッセージが表示されます。この問題は、ALの後の余分な空白に関連しています。これは、状態の省略形を挿入した後に何とか空白を追加します。州の省略形を書いた後、しかしEnterを押す前に、スペースバーを押すようなものです。
ファイル名の余分な空白を取り除くにはどうすればよいですか?あなたが行うことができます最後の文字(空白)を取り除くために
スペースはデータから来ていません。これはカッコを使用することによる副作用のようです。これをテストすれば、私の言いたいことが分かります。 '(echo 1&echo AZ)| findstr" 1 AZ ">> test.txt'。 – Squashman
@スカッシュマン:うーん。あなたのコードは私のために各行にターミナルスペースを与えました(ファイルサイズは9バイト)が、パイプが削除されたときには出力にはスペースがありませんでした。 '&'の後の 'echo'の前のスペースは無効です... – Magoo
[カッコで囲まれたブロックがパイプされていると遅延拡張が機能しません](https://stackoverflow.com/q/8192318/1012053) )。加えて、根本的な問題に対処していません。 – dbenham