@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 =...
変数 " " を設定しますが、それはまったく別の話です。var
var
ECHO
ステートメントの . の直後にドットがあることに注意してくださいECHO
。ステートメントECHO
or ECHO
will により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
証拠としての新しいファイル