2011-09-22 118 views
1

我正在尝试创建批循环(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

+0

您是否需要复制'Bar'文件夹中的所有文件?或者你只有某些你想复制的文件?如果只有某些文件,它们是否共用一个通用名称?你在移动所有'.txt'文件吗?你可以向我们解释你的真实应用是什么。我们承诺我们不会追踪你偷取你的数据= D。除了Jeb = / – Mechaflash

回答

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 
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