Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmd 输入记录中带符号的批处理文件问题(&N)_Cmd_Batch File - Fatal编程技术网

Cmd 输入记录中带符号的批处理文件问题(&N)

Cmd 输入记录中带符号的批处理文件问题(&N),cmd,batch-file,Cmd,Batch File,我创建了一个批处理文件来处理输入记录文件。我删掉了大部分代码,所以问题出在这里。当它用符号和读取第三条记录时,作业不会写入输出记录,除非我在%%H变量周围加上双引号。但是,当我这样做时,它会将添加到记录的第一个和最后一个字节。我想基本上复制记录,我也在做一些其他的处理 有没有一种方法可以从前面和后面去除被附加的符号,或者ECHO有没有一种方法可以处理符号?谢谢 输入文件有三条记录: HOW NOW BROWN COW JACK AND JILL JUST YOU & ME 脚本如下:

我创建了一个批处理文件来处理输入记录文件。我删掉了大部分代码,所以问题出在这里。当它用符号和读取第三条记录时,作业不会写入输出记录,除非我在%%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
您可以使用删除第一个和最后一个字符,即引号


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

这里,通过%运算符删除引号:

@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
输出:

E:\>foo2

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

我尝试了这个,但在FOR循环的上下文中无法让它工作。当我用一组变量=%*替换单行回显时,进程仍然失败,然后回显%VAR:~1,-1%>>%outfile%。是否传递了多个项%*?如果不是,则%1是传递的第一项:循环:;设置项=%1;ECHO%ITEM:~1,-1%要从%H中删除引号,您可以使用%%H,如果没有引号,它将不会起任何作用。@simplebest55哦,太棒了。。。我不知道有那么简单@ricchaudoir:诀窍在于:首先在变量%%H周围使用引号。然后,一旦不再需要它们,请使用%%~H。这将在引号出现时修剪引号,如果没有引号,则不会执行任何操作。是的,可以使用tilda字符剥离包装引号。如果“echo%VAR%”返回值,则“echo%~VAR%”应返回不带引号的值。通过键入“cmd.exe/?”查看帮助。