用于在多个文件夹中创建多个文件夹的批处理脚本


1

我已经尝试了很多东西和大量的研究,但我尝试过没有做过我需要的东西。

我正在尝试在另一个文件夹中创建多个文件夹的文件夹结构。在批处理脚本循环中,逗号分隔文件夹的名称。

我现在需要创建另一个子文件夹堆,但我需要它们位于由逗号文件夹名称分隔的另一个列表创建的第一级子文件夹下面。

示例文件夹结构

 - Main folder
   - Sub folder A
      - Sub folder 1
      - Sub folder 2
      - Sub folder 3
      - Sub folder 4 
   - Sub folder B
      - Sub folder 1
      - Sub folder 2
      - Sub folder 3
      - Sub folder 4 
   - Sub folder C
      - Sub folder 1
      - Sub folder 2
      - Sub folder 3
      - Sub folder 4

我已经设法创建了所有“主要”子文件夹 A,B,C 但我没有运气创建子文件夹 1,2,3.. 从第一堆子文件夹下面的新堆创建为 A,B,C

for %%x in (A,B,C) do md %%x

请在下面查看我的答案,如果它有助于您解决问题,请考虑检查我的答案左侧的小灰色复选标记。我做了测试,并确认这与您指定的完全相同,所以如果您可以通过给它检查来接受我的答案,那么将关闭此问题解决。
Pimp Juice IT

Answers:


2

您可以使用。创建变量 A,B,C 设置,用。创建另一个变量 1,2,3,4 设置,然后将每个集合放在一个嵌套 对于 循环并相应地迭代每个变量值从每个集合得到 A1, A2, A3, B1, B2, B3 等等,确保每个组合都被重复。

你只需使用 MD 命令用于创建附加到根目录的目录组合,其中由逗号分隔的组A的主子文件夹将驻留。

脚本示例

一定要设置 RootDir= value作为包含组的父文件夹的完整路径。列表文件夹设置为 SubA= 变量。

@ECHO ON
SET RootDir=C:\Main
SET SubA=A,B,C,D,E
SET SubB=1,2,3,4,5
FOR %%A IN (%SubA%) DO FOR %%B IN (%SubB%) DO IF NOT EXIST "%RootDir%\%%~A\%%~B" MD "%RootDir%\%%~A\%%~B"
EXIT

更多资源


如果将输出重定向到2> nul,则可以跳过IF存在。
harper

@harper请使用回复评论示例语法 FOR %%A IN (%SubA%) DO FOR %%B IN (%SubB%) DO IF NOT EXIST "%RootDir%\%%~A\%%~B" MD "%RootDir%\%%~A\%%~B" 当你有机会我的例子中的逻辑的一部分,所以我可以测试这个来确认。
Pimp Juice IT

0

鉴于例如布局:

Main Folder 
     Sub Folder A
        Sub Folder 1
        [...]
        Sub Folder 4
     Sub Folder B 
        Sub folder 1 
        [...]
        Sub Folder 4 
     [...]

最简单的答案(即使它相当乏味和蛮力)就是简单地写出来 mkdir 每个最终子文件夹的行:

mkdir "Main Folder\Sub Folder A\Sub Folder 1"
mkdir "Main Folder\Sub Folder A\Sub Folder 2"
mkdir "Main Folder\Sub Folder A\Sub Folder 3"
mkdir "Main Folder\Sub Folder A\Sub Folder 4"

根据需要多次重复此操作,只需更改文件夹名称即可。

如果目录最初不存在,则将创建该目录。如果确实存在,则会在其中创建一个文件夹。所以第一行:

mkdir "Main Folder\Sub Folder A\Sub Folder 1"

将创建显示的所有三个文件夹,而这一行:

mkdir "Main Folder\Sub Folder Z\Sub Folder 1"

仅创建第2和第3个文件夹(因为 Main Folder 已经存在)。

如您所示,您需要特殊字符(空格和逗号),您需要用引号包装每个命令(如图所示)。对于文件夹 没有任何 特殊字符(例如 Folder1\Folder2 ),报价是不必要的。

我没有包含驱动器号,因为我假设.bat文件将与您要创建的目录位于同一目录中 Main Folder 及其子文件夹。


0

powershell可能会这样做。

$root = "\\*\folderA"

ForEach ($dir in (Get-Item -Path "$root\*\" | ?{$_.PSIsContainer})){

If (!(Test-Path -Path "\*\FolderA")) {

    New-Item -Path "$root\*\" -Name "Folder1" -ItemType Directory | Out-Null

}

}

重复一遍 New-Item -Path "$root\*\" -Name "Folder1" -ItemType Directory | Out-Null 每个子文件夹的一部分

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.