2011-10-06 35 views
0

我有一個批處理腳本,它應該解析其中包含文件名和時間戳的文件。批處理腳本 - FOR/F中的無效語法

:MAIN 

SETLOCAL EnableDelayedExpansion 

FOR /F "tokens=1,2,4 skip=7" %%A in (C:\list_of_psa_files.txt) DO 
@echo %%A %%B %%C 

exit 

文件C:\ list_of_psa_files.txt具有以下數據中它

Volume in drive C is Windows XP 6.6 
Volume Serial Number is AC12-84AA 

Directory of C:\Test 

10/05/2011 03:17 PM <DIR> . 
10/05/2011 03:17 PM <DIR> .. 
10/05/2011 01:21 PM 4,393 1-16332-1008261.psa 
10/05/2011 01:21 PM 4,863 1-16332-1011698.psa 
10/05/2011 01:21 PM 4,793 1-16332-1023151.psa 
10/05/2011 01:21 PM 4,916 1-16332-1035695.psa 
10/05/2011 01:21 PM 4,524 1-16332-1037029.psa 
10/05/2011 01:21 PM 4,235 1-16332-1049340.psa 
10/05/2011 01:21 PM 3,135 1-16332-1049926.psa 
10/05/2011 01:21 PM 4,657 1-16332-1054756.psa 

然而,當我運行我的腳本,它與消息無效語法失敗。有人可以幫我弄清楚我哪裏錯了。

我所要做的就是獲取日期,時間和文件名,而不用將擴展名寫入我的舊文件中的新文件。

感謝您的時間 - 欣賞它。

桑德斯。

回答

2

如果你真的你的echo在一個單獨的行(它不是編輯過程的人工製品),你不能這樣做。您將需要使用任一條線路或:

FOR /F "tokens=1,2,4 skip=7" %%A in (C:\list_of_psa_files.txt) DO (
    @echo %%A %%B %%C 
) 

當我創建你顯示文件和腳本,我得到:

The syntax of the command is incorrect. 

當我然後將其更改爲我建議的變種,它輸出:

10/05/2011 01:21 4,393 
10/05/2011 01:21 4,863 
10/05/2011 01:21 4,793 
10/05/2011 01:21 4,916 
10/05/2011 01:21 4,524 
10/05/2011 01:21 4,235 
10/05/2011 01:21 3,135 
10/05/2011 01:21 4,657 

如預期的那樣。當你在一條線上做同樣的輸出:

FOR /F "tokens=1,2,4 skip=7" %%A in (C:\list_of_psa_files.txt) DO @echo %%A %%B %%C 
+0

這是正確的!謝謝你Paxdiablo! – user982201

+0

但是當我嘗試將我的輸出重定向到另一個文件時,我只是得到它的一行。像這樣 - 10/05/2011 01:10 24,971而且代碼爲SETLOCAL EnableDelayedExpansion :MAIN FOR/F「tokens = 1,2,4 skip = 5」%% A in(C:\ list_of_psa_files .txt)DO(@echo %% A %% B %% C> C:\ list_of_file_ts.txt) exit – user982201

+0

這是一個_different_問題,@ user982201,但我會幫你解決的。你爲每一次迭代都做了'blah blah> out.txt'。換句話說,每次迭代_overwrites_文件意味着你只會得到最後一個。在'for'語句中做一個'del out.txt'清空它,然後使用'>>'而不是'>',以便每次迭代_appends_它的數據而不是覆蓋它。 – paxdiablo