【问题标题】:Batch Folder_Set in For as Variable批处理文件夹_设置为变量
【发布时间】:2014-12-07 05:50:18
【问题描述】:

需要的是“文件夹集”或“文件集”或文件夹/文件列表部分“For”命令通过变量引用。 假设我们希望通过以下方式在“For /D”中定义一个文件夹集:

SET "FOLDERSET=X* Y* Zee*"

希望类似的东西

for %%B in (!FOLDERSET!) do (

将产生遍历数组作为实际文件夹而不仅仅是字符串数组的奇迹。 它似乎在使用时确实有效

SET "FOLDERSET=*"

SET "FOLDERSET=S*"

对于以“S”或开头的文件夹

SET "FOLDERSET=S* G*"

同样对于以“S”开头且未迭代 G* 的文件夹,但最初的问题仍然是为上述通配符列表设置适当的分隔符。有什么办法吗?

【问题讨论】:

    标签: list variables for-loop set directory


    【解决方案1】:

    我看不出你在哪里遇到问题。除非我不明白你的问题,否则它对我来说非常好用:

    @echo off
    setlocal
    set "folderset=s* x*"
    
    echo Using normal expansion:
    for /d %%F in (%folderset%) do @echo %%F
    echo(
    
    echo Using delayed expansion
    setlocal enableDelayedExpansion
    for /d %%F in (!folderset!) do @echo %%F
    

    --输出--

    Using normal expansion:
    SETA
    size
    snake
    svnsave
    svntest
    xml
    xyz
    
    Using delayed expansion
    SETA
    size
    snake
    svnsave
    svntest
    xml
    xyz
    

    延迟扩展存在一个潜在问题,如果启用延迟扩展,包含! 的 %%F 值将在扩展时损坏。

    【讨论】:

      【解决方案2】:

      这是一种更通用的解决方案,用于在指定驱动器范围内的指定文件夹集 FOLDERSET 中查找指定文件夹 MYDIRFOUND 的第一次出现。在 FOLDERSET 中以字母开头的名称的根文件夹中的某处创建一个名为 MYDIRFOUND 的文件夹:

      Setlocal EnableDelayedExpansion
      SET "FOLDERSET=ZZ* D* G* S* T*"
      
      
      for %%T in (B C D F G) do (
      if exist %%T: (
      
      %%T:
      cd \
      for /D %%C in (!FOLDERSET!) do (
      
      REM pushd popd won't upset the outer loop
      pushd %%C
      
      for /D /R %%K in (*) do (
      REM MUST be (*) or will recurse for subfolders matching FOLDERSET. MYDIRFOUND is not one of them.
      
      Set "MYTEMP=%%K"
      SET "_MYDIR=!MYTEMP:MYDIRFOUND=!"
      
      IF NOT !MYTEMP!==!_MYDIR! (
      call SET "_MYDIR=%%~K"
      goto MYDIRFOUND
      )
      )
      popd
      )
      
      REM DRIVE LOOP AND EXIST
      )
      )
      goto eof
      :MYDIRFOUND
      echo !_MYDIR!
      echo success
      pause
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-11
        • 2012-07-07
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多