2011-10-06 61 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