Windows 7 批处理文件以在其他子文件夹中创建子文件夹,但仅在顶层创建

Windows 7 批处理文件以在其他子文件夹中创建子文件夹,但仅在顶层创建,windows-7,batch-file,directory,Windows 7,Batch File,Directory,我有一个与类似的问题,但我无法找到解决方案(我完全是个新手) 我在网络驱动器上有一组文件夹,每个文件夹都以一个管理器命名(例如,\sfnetfile\DEPT\HR\u manager\manager,Test和\sfnetfile\DEPT\HR\u manager\manager,Test 2)。我正在尝试在2013\Variable的每个manager文件夹中创建文件夹/子文件夹组合。在某些情况下,经理已经有了2013子文件夹,但没有变量子文件夹(请原谅这个愚蠢的术语) 我还希望阻止批处理

我有一个与类似的问题,但我无法找到解决方案(我完全是个新手)

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

我还希望阻止批处理文件在每个管理器文件夹中的现有其他子文件夹中创建
2013\Variable
文件夹(因此我不希望它,例如,创建另一个级别:
\sfnetfile\DEPT\HR\u manager\manager,Test 2\2012\2013\Variable

这是我的密码:

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

这样做应该可以:

@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前面加上
前缀,如果不存在“%%d\2013\Variable\”
。这样做的一个好处是,如果存在名为Variable的文件,则会看到一条错误消息,该文件会阻止创建文件夹。