【问题标题】:Recursively create folder in specific directories在特定目录中递归创建文件夹
【发布时间】:2012-11-20 15:09:27
【问题描述】:

在最近的备份/恢复周期中,我意识到我设法从“.svn”目录中省略了“tmp”目录,因此我无法更新我的工作副本。如果我手动创建一个新的空“tmp”目录,问题就会消失,所以我正在寻找一种方法来递归地遍历每个文件夹,找到“.svn”文件夹并在其中创建一个“tmp”文件夹。

因为我不想弄乱现有的文件夹,所以我想在我做傻事之前先寻求帮助 :)

评论/建议将不胜感激,谢谢!

PS:这是在 Windows 机器上,很遗憾 Bash 和其他 unix 实用程序不存在。

【问题讨论】:

    标签: windows batch-file


    【解决方案1】:

    上面的脚本在我的 Windows 7 机器上不起作用。 “dir /b /s .svn”没有获取所有目录,我收到“File Not Found”错误。

    除了仅选择目录之外,我还将脚本更改为具有 /ad 并且有效!这是对我有用的脚本。

    @echo off
    for /f "usebackq delims=" %%I in (`dir /ad /b /s .svn`) do (
    echo Fixing %%I...
    mkdir "%%I\tmp"
    )
    

    【讨论】:

      【解决方案2】:

      取决于有多少。

      列出目录

       dir/B/S .svn >dirs.bat
      

      在您选择的编辑器中编辑 dirs.bat。在每行的开头添加 md (因为每行都以 C: 之类的开头,您可以使用相当愚蠢的编辑器 - 包括记事本 - 将 C: 更改为 md C: )。将 /tmp 添加到每一行的末尾(将 .svn 替换为 .svn\tmp)。节省。运行 BAT 文件

      工作完成。

      【讨论】:

      • 嗨,保罗,感谢您的建议。如果文件夹的路径不包含任何空格,则它工作正常,如果存在空格,则失败(并随机开始在我运行批处理文件的同一目录中创建文件夹,这很奇怪)。我尝试将路径包含在 "s 中,但这并没有帮助。有什么想法吗?干杯。
      • 在进行文本替换时将目录放在引号中
      • 是的,原来我遗漏了一些引号:/ 谢谢你们的帮助。
      【解决方案3】:

      以下是自动化整个过程的方法。将以下内容放入 fixtmp.cmd 之类的文件中:

      @echo off
      for /f "usebackq delims=" %%I in (`dir /b /s .svn`) do (
      echo Fixing %%I...
      mkdir "%%I\tmp"
      )
      

      【讨论】: