1

我想做以下事情

set _1=*.*
set _2=*.lng
set _3=*.exe
...

在这样的 for 循环中:

set COUNT=0
for %%f in (*.*, *.lng, *.s, *.exe, *.sfx, *.64.sfx, rar*.lst) do (
 set /A COUNT+=1
 set _!COUNT!=%%f
)

但这不起作用。我试图用“^”逃跑,也试过

For /F "useback" %%f in ('*.*, *.lng, *.??s, *.exe, *.sfx, *.64.sfx, rar*.lst') 

但有了这个,我只得到“_1= ”,而另一个“_2”到“_7”不见了。

谁能解释如何将这些通配符字符串分配给循环内的变量?

4

2 回答 2

1

尝试这个:

@echo off &setlocal
set COUNT=7
set "var=*.* *.lng *.s *.exe *.sfx *.64.sfx rar*.lst"
for /l %%a in (1,1,%COUNT%) do for /f %%b in ('for /f "tokens=%%a" %%i in ^("%var%"^) do @echo(%%i') do set "_%%a=%%b"
set "_"

它在这里工作。

于 2013-04-26T09:09:16.697 回答
0

您应该使用 FOR/F 循环,因为正常循环会尝试匹配通配符。

要遍历一个字符串中的值列表,您可以在字符串中使用换行符。
首先要解析的文本用逗号分隔,然后我用换行符替换所有逗号。
因此 FOR/F 可以循环遍历列表并为每行生成一个标记。

@echo off
setlocal EnableDelayedExpansion
set "text=*.*,*.lng,*.exe"
set LF=^


rem *** Two empty lines are required here for creating the LF
for %%L in ("!LF!") do set "text=!text:,=%%~L!"
for /f "delims=" %%a in ("!text!") do (
 set /a count+=1
 set "_!count!=%%a"
) 
set _
于 2013-04-26T10:17:50.023 回答