2013-03-29 54 views
0

我是新來的Stackoverflow,所以我希望我發佈這個在正確的區域。我一直在尋找對我的問題的答案很長一段時間。我正在嘗試將一些信息添加到文件的開頭。需要該信息的文件具有動態文件名(除前5個字符外,從不相同)。您可以在我的代碼中看到我在我的文件中需要的信息。文件原始文件的名稱是LBL043629201313114512.DTA。關於文件名的組成部分是「LB04xxxx.XXXX是我正在尋找的,以確保我抓取正確的文件。使用BAT進程將信息添加到文件開頭,但保留文件名約定

我需要輸出爲原始文件名(LBL ...... DTA 。),在該文件的開頭所收集的數據的任何幫助將是巨大

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: 
(
    echo %NAME% 
    echo %ADDRESS% 
    echo %CITY% %STATE% %ZIP% 
    echo %SPECIAL% 
) > address.txt 
copy address.txt+LBL04%STORE%*.DTA=test.txt 
+0

一切除了你的意圖是什麼在最後一行('copy'語句)明確。'copy'做的副本指定的文件(在本例中爲'address.txt'),「+」表示「附加」(不是「串」串聯,而是「文件內容」串聯),而「=」無效一個複製語句(它的存在導致「無效的語法錯誤」)。換句話說,'copy file1 + file2'會生成一個文件,其中包含'file1'的內容,後面是'file2'的內容。爲了命名這個新的單個文件,你只需指定另一個文件名:'copy file1 + file2 file3'。 –

+0

'copy file1 + file2 = file3'出人意料地工作(至少在XP上) – Stephan

+0

'='是windows cmd中的默認分隔符之一。 – Endoro

回答

0

只是在末尾附加兩行:

del /q LBL04%STORE%*.DTA 
ren test.txt LBL04%STORE%*.DTA 

可以肯定,你不需要原.DTA再次(更好,只要你測試你的腳本就做一個備份

0
@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後面有一個點。陳述ECHOECHO將導致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作爲證據

相關問題