2010-07-15 99 views
0

我已创建一个批处理文件来处理输入记录文件。我已经删除了大部分代码,所以这是问题所在。当它读取第3条记录时,使用&符号,作业不会写入输出记录,除非我在%%H变量周围放置双引号。但是,当我这样做时,它会将"添加到记录的第一个和最后一个字节。我想基本上复制记录,并且我还在做其他一些处理。&符号与输入记录中的批处理文件问题

是否有任何剥离“,从正面和背面正在追加,或者是有ECHO处理符号感谢

输入文件有三个记录的方式的方式:?!

HOW NOW BROWN COW 
JACK AND JILL 
JUST YOU & ME 

脚本如下:

set infile=D:\file.txt 
set outfile=D:\outfile.txt 

for /F "tokens=*" %%H in (%infile%) do (CALL :Loop "%%H") 

rem for /F "tokens=*" %%H in (%infile%) do (CALL :Loop %%H) 

GOTO :Loop_Exit 

:Loop 
    echo %* >> %outfile% 
:Loop_Exit 
pause 
+0

@ricchaudoir:诀窍是:围绕变量使用引号“ %% H“。那么一旦你不再需要它们,就使用%%〜H。这将修剪引号(如果它们存在),并且什么也不做(如果没有引号)。 – 2010-08-15 09:32:04

+0

是的,您可以使用tilda字符去除包装引号。如果'echo%VAR%'返回“value”,那么'echo%〜VAR%'应该返回没有引号的值。通过键入'cmd.exe /?'来查看帮助。 – djangofan 2013-05-09 23:47:56

回答

0

您可以使用variable substring operators剪掉第一和最后一个字符,引号

因此,如果VAR="Quoted String"那么命令echo %VAR:~1,-1%将不会显示报价。

+0

我试过了,无法让它在FOR循环的上下文中工作。当我用SET VAR =%*替换一行回声,然后echo%VAR:〜1,-1%>>%outfile%时,该过程仍然失败。 – TheRic 2010-07-15 20:27:00

+0

您是否传递了多个项目('%*')?如果不是,'%1'是第一个传递的项目:'Loop:; SET ITEM =%1; ECHO%ITEM:〜1,-1%' – ewall 2010-07-15 21:02:52

+0

只需修剪'%H'中的引号,就可以使用'%〜H'(如果没有引号,它将不会执行任何操作)。 – 2010-08-15 09:33:00

0

在这里你去,这样做的伎俩通过%〜运算符删除报价:

@echo off 

set infile=e:\file.txt 
set outfile=e:\outfile.txt 

for /F "tokens=*" %%H in (%infile%) do (
    call :Loop "%%H" 
) 

exit /b 0 

:Loop 
    for %%a in (%*) do echo %%~a >> %outfile% 
exit /b 0 

OUTPUT:

E:\>foo2 

E:\>type outfile.txt 
HOW NOW BROWN COW 
JACK AND JILL 
JUST YOU & ME