【问题标题】:How can i use special charackters like " * and ? " in the " in (...) " part of a FOR loop如何在 FOR 循环的“in (...)”部分中使用“* 和?”等特殊字符
【发布时间】:2013-04-26 08:11:51
【问题描述】:

我想做以下事情

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”不见了。

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

【问题讨论】:

  • useback 是无效参数。

标签: variables for-loop batch-file special-characters wildcard


【解决方案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 "_"

在这里工作。

【讨论】:

  • 我想 OP 想从列表中创建变量。不使用变量来回显它们。
  • 我需要七个 for 循环变量(无聊),一个用于 %LF% 的字符(您的代码)或一个“动态令牌”。我用 for /l 循环构建了一个,并且需要一个额外的 for /f 循环来将 for /l 变量与“令牌”分开。 [对不起我的英语:(]
  • 有点复杂,但是一个很好的解决方案。解决了我的问题。
  • 请不要忘记标记问题answered谢谢!
【解决方案2】:

您应该使用 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 _

【讨论】:

  • 也是一个很好的解决方案,我以后可以用于类似的编程任务。
猜你喜欢
  • 1970-01-01
  • 2022-11-16
  • 2022-08-18
  • 1970-01-01
  • 2018-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-29
相关资源
最近更新 更多