@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%
很明顯,您應該首先嚐試對真實數據的副本,而不是實時數據。
第一個FOR
確保將列表中的變量名稱從環境中刪除,以便如果它們具有現有值,則在任何提示下按enter
,則該值將被保留。
第二個FOR
循環確保每個輸入的變量都有一個值。請注意,target
不包含在此組中。 =
和)
之間有一個空格。
使用簡單的SET
指令,SPACES非常重要。語法(SET var=)
或等效地SET "var="
確保變量var
被設置爲[無]。 SET var=
的問題在於有些編輯離開了終端空間,在這種情況下,var
將被設置到這些終端空間 - 並且他們有點難以看清。此外,SET var =...
將設置變量「var
」而不是變量「var
」 - 但這是一個完整的'未記錄的故事。
請注意,ECHO
語句現在在ECHO
後面有一個點。陳述ECHO
或ECHO
將導致ECHO
報告其狀態,並且ECHO is off
將出現在輸出中。添加「.
」給ECHO
值得玩味的東西和它產生的在線內容超出.
中的下一條語句dir
指令產生的/b
基本形式(文件名只)/a-d
,沒有目錄名/o-d
在一個目錄列表反向日期順序。 FOR /f
是一種逐行讀取dir /b ...
指令輸出的機制。下一行「輸入」讀取的內容每次迭代應用於%%i
。因此,遇到的第一個文件名匹配的LBL04%STORE%*.DTA
將被設置爲target
,並且由於現在設置了target
,因爲if not defined
的門,所以更多行將被忽略。
如果沒有匹配的文件,則不會定義target
(它在第一個for
循環中被刪除),因此可能會生成錯誤消息。
否則,將串聯版本的文件串聯到test.txt
,然後move
聲明實際上replaces
文件「%target%
(我們知道存在)。
的>nul
在這些最後兩行的suppreses消息」 1個文件複製/ moved`
工作完成了!新文件TYPED
作爲證據
一切除了你的意圖是什麼在最後一行('copy'語句)明確。'copy'做的副本指定的文件(在本例中爲'address.txt'),「+」表示「附加」(不是「串」串聯,而是「文件內容」串聯),而「=」無效一個複製語句(它的存在導致「無效的語法錯誤」)。換句話說,'copy file1 + file2'會生成一個文件,其中包含'file1'的內容,後面是'file2'的內容。爲了命名這個新的單個文件,你只需指定另一個文件名:'copy file1 + file2 file3'。 –
'copy file1 + file2 = file3'出人意料地工作(至少在XP上) – Stephan
'='是windows cmd中的默認分隔符之一。 – Endoro