批处理文件,用于在其他子文件夹中创建子文件夹,但仅限于顶级

时间:2013-07-09 20:44:22

标签: windows-7 batch-file directory

我和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

1 个答案:

答案 0 :(得分: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!"
  )
)