我试图编写一个实用程序来获取用户的逗号分隔值文件,并用空值替换单个空格和单个句点:
表示为, ,
的(电子表格)字段变为,,
和,.,
之类的字段变为,,
我使用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版本。
答案 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!
)