For / F in Batch:使用空格转义类型文件名

时间:2015-01-09 21:14:19

标签: string csv batch-file

我试图编写一个实用程序来获取用户的逗号分隔值文件,并用空值替换单个空格和单个句点:

表示为, ,的(电子表格)字段变为,,

,.,之类的字段变为,,

我使用type命令将CSV写入临时文件,然后在写入新CSV并且违规值消失之前,在每行上使用字符串替换。 !FQP!是完全限定的路径,!INTEXTFILE!是文件名。如果!INTEXTFILE!没有空格,则可以正常工作。

SETLOCAL ENABLEDELAYEDEXPANSION
for /f tokens^=*^ delims^=^ eol^= %%A in ('type "!FQP!!INTEXTFILE!"') do ( some commands )

但是,用户的文件中都会有空格,我已经研究并重试了几天,试图找到一种方法来完成这项工作。根据这里的多个页面(For /f processing filename with spaces是最简洁的),在其他参考书中,我相信我需要使用&#34; usebackq&#34; after / f后,用反引号替换单引号。但是,如果我以任何方式使用它(有或没有引号,在/ f之后,在%% A之前或之后的每个选项之前或之后,用方括号括起来,写成usebackqParsingKeywords),我会得到如下错误:< / p>

  

(当usebackq跟在/ f之后)usebackq此时是意料之外的

     

(&#34; usebackq&#34;跟随/ f)令牌= * delims = eol =此时是意料之外的

     

(&#34; usebackq tokens ^ = ^ delims ^ = ^ eol ^ =&#34; follow / f)tokens ^ = ^ delims ^ = ^ eol =&#34;此时出人意料

我在没有usebackq的情况下尝试过,但我知道正确答案所在的位置(这正是此代码段的含义:指定您可以使用引号引用FileNameSet中的文件名,后引用字符串作为命令执行,单引号字符串是文字字符串命令。)

我对此有任何帮助表示感谢!

我在64位计算机上使用Windows 7企业版,因此​​我不会使用不支持usebackq的Windows版本。

1 个答案:

答案 0 :(得分:2)

你的问题只是FOR循环在语法上是不正确的。 FOR循环的参数应遵循/F开关并位于引号中:

SETLOCAL EnableDelayedExpansion
FOR /F "usebackq tokens=* delims=" %%A IN (`TYPE "!FQP!!INTEXTFILE!"`) DO (
    REM Do some stuff...

    SET Value=%%A
    REM Replace spaces.
    SET Value=!Value:, ,=,,!

    REM Replace periods.
    SET Value=!Value:,.,=,,!

    ECHO !Value!
)