批量换循环逃生星号

时间:2011-09-22 22:54:39

标签: for-loop batch-file escaping

我正在尝试创建一个循环批处理(Windows XP和更新的命令提示),它遍历包含一个或多个星号的字符串。我怎样才能做到这一点?这是一个例子:

@FOR %%A IN (A* B) DO @ECHO %%A

预期的输出(我想要得到的)如下:

A*  
B

但是,我实际上使用上面的命令获得的是B而且只有B.出于某种原因,循环忽略带有星号的所有内容。我试图用1-4个插入符号(^),反斜杠(\),百分号(%)和其他星号(*)来转义星号,但都无济于事。提前感谢照亮我。

如果您需要更多信息:

这样做的目的是从空格分隔的部分路径列表中解析路径。例如,我想使用以下方法将C:\ Bar \ A.txt,C:\ Bar \ B.txt和C:\ Bar \ C * .txt复制到C:\ Foo \:

@SET FILE_LIST=A B C*  
@FOR %%A IN (%FILE_LIST%) DO @COPY C:\Bar\%%A.txt C:\Foo\

如果有另一种方法可以做到这一点(最好不要输入每个复制命令,因为有大约200个文件,这与我不想存储每个文件的完整路径的原因相同),我会感谢帮助。再次感谢,

-Jeff

2 个答案:

答案 0 :(得分:2)

在你的情况下,星号的工作方式与其预期相同,

@FOR %%A IN (A* B) DO @ECHO %%A

将A *扩展为以A开头的所有文件。

实现目标的可能方法就是使用此扩展

@ECHO off
PUSHD C:\bar
SET FILE_LIST=A.txt B.txt C*.txt
FOR %%A IN (%FILE_LIST%) DO (
  IF EXIST %%A COPY %%A C:\Foo\
)
POPD

答案 1 :(得分:1)

这可能有所帮助:

@echo off
set "it=a*b .txt-b*.txt-c*.txt-d.txt"
set /a i=0,fn=3
:startLoop
set /a i=i+1
for /f "tokens=%i%delims=-" %%m in ("%it%") do echo %%m
if %i% lss %fn% goto:startLoop
相关问题