【问题标题】:Batch file to create subfolder in other subfolders, but only at top level在其他子文件夹中创建子文件夹的批处理文件,但仅限于顶层
【发布时间】:2013-07-07 15:05:19
【问题描述】:

我遇到了与this post 类似的问题,但我无法让解决方案发挥作用(我完全是新手)。

我在网络驱动器上有一组文件夹,每个文件夹都以管理员命名(例如 \sfnetfile\DEPT\HR_Manager\Manager, Test\sfnetfile\DEPT\HR_Manager\Manager, Test 2)。我正在尝试在2013\Variable 的每个管理器文件夹中创建一个文件夹/子文件夹组合。在某些情况下,经理已经有一个 2013 子文件夹,但没有 Variable 子文件夹(请原谅这个愚蠢的术语)。

我还想防止批处理文件在每个管理器文件夹中的现有其他子文件夹中创建 2013\Variable 文件夹(所以我不希望它,例如,创建另一个级别:\sfnetfile\DEPT\HR_Manager\Manager, Test 2\2012\2013\Variable

这是我的代码:

FOR /d %A IN (\sfnetfile\DEPT\HR_Manager*) DO mkdir "%A"\2013\Variable

【问题讨论】:

    标签: windows-7 batch-file directory


    【解决方案1】:

    应该这样做:

    @echo off
    
    for /d %%d in (\\sfnetfile\DEPT\HR_Manager\*) do md "%%~d\2013\Variable" 2>nul
    

    假设sfnetfile 是远程服务器的名称,DEPT 是该服务器上的共享文件夹。如果sfnetfile 是映射网络驱动器上的顶级文件夹,请将其更改为:

    @echo off
    
    for /d %%d in (X:\sfnetfile\DEPT\HR_Manager\*) do md "%%~d\2013\Variable" 2>nul
    

    其中X: 是网络驱动器的盘符。

    编辑:正如@dbenham 正确提到的,重定向错误输出(以抑制现有叶文件夹的错误消息)也将抑制任何其他错误消息。更复杂的方法是检查文件夹是否不存在,然后才创建它:

    @echo off
    
    setlocal EnableDelayedExpansion
    
    for /d %%d in (\\sfnetfile\DEPT\HR_Manager\*) do (
      set "folder=%%~d\2013\Variable"
      if exist "!folder!" (
        if not exist "!folder!\" echo "!folder!" exists as a file! 1>&2
      ) else (
        mkdir "!folder!"
      )
    )
    

    【讨论】:

    • +1,将 stderr 重定向到 nul 的另一种方法是在 MD 前面加上 if not exist "%%d\2013\Variable\"。这样做的一个好处是,如果存在阻止创建文件夹的名为 Variable 的文件,您将看到一条错误消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-11
    • 2021-09-17
    相关资源
    最近更新 更多