@ECHO OFF
SETLOCAL
FOR %%i IN (store name address
city state zip
special target) DO (SET %%i=)
set /p STORE=Please enter store number:
set /p NAME=Please enter name:
set /p ADDRESS=Please enter address:
set /p CITY=Please enter address:
set /p STATE=Please enter State:
set /p ZIP=Please enter ZIP:
set /p SPECIAL=Add any Special Instructions:
FOR %%i IN (store name address
city state zip
special) DO IF NOT DEFINED %%i (SET %%i= )
(
ECHO.%NAME%
ECHO.%ADDRESS%
ECHO.%CITY% %STATE% %ZIP%
ECHO.%SPECIAL%
) > address.txt
FOR /f %%i IN (
'dir /b /a-d /o-d lbl04%store%*.dta'
) DO IF NOT DEFINED target SET target=%%i
IF NOT DEFINED target ECHO LBL04%STORE%*.DTA NOT found&GOTO :EOF
copy address.txt+%target%=test.txt >nul
MOVE test.txt %target% >nul
type %target%
明らかに、実際のデータではなく、最初に実際のデータのコピーに対してこれを試す必要があります。
1つ目FORは、リスト内の変数名が環境から削除されることを保証するため、それらに既存の値がある場合enter、プロンプトのいずれかで押すと、その値が保持されます。
2 番目のFORループは、入力された変数のそれぞれに値があることを確認します。targetこのグループには含まれないことに注意してください。=と の間にスペースがあり)ます。
簡単なSET指示では、スペースは重要です。この構文(SET var=)または同等のものは、変数が [nothing] に設定されてSET "var="いることを保証します。var問題SET var=は、一部のエディターが行にターミナル スペースを残し、そのような状況下でvarは、それらのターミナル スペースに設定されるということです - そして、それらは少し見にくいです。また、変数 " " ではなくSET var =...変数 " " を設定しますが、それはまったく別の話です。varvar
ECHOステートメントの . の直後にドットがあることに注意してくださいECHO。ステートメントECHOor ECHOwill によりECHO、その状態が報告ECHO is offされ、出力に表示されます。「 」を追加すると、噛む何かが.与えられ、それを超える行コンテンツが生成されますECHO.
dir次のステートメントの命令は、/b基本的な形式 (ファイル名のみ)のディレクトリ リストを生成し、逆日付順/a-dのディレクトリ名は生成しません。/o-dこれFOR /fは、dir /b ...命令の出力を 1 行ずつ読み取るメカニズムです。「入力」読み取りの次の行の内容は、%%i各反復に適用されます。したがって、見つかった最初のファイル名の一致LBL04%STORE%*.DTAが設定され、 が設定されているため、それtarget以降の行はゲートtargetのために無視されます。if not defined
一致するファイルがない場合、target定義されない (最初のforループで削除された) ため、エラー メッセージが生成される可能性があります。
それ以外の場合は、ファイルを連結してからtest.txt、move実際にreplacesはファイル " %target%(存在することがわかっている) と連結されたバージョンのステートメントを実行します。
>nulこれらの最後の 2 行のそれぞれで、「1 ファイルがコピー/移動されました」というメッセージが抑制されます
仕事終わり!TYPED証拠としての新しいファイル