我正在尝试创建一个循环批处理(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 :(得分: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