我尝试了很多方法,也做了大量的研究,但没有一个能达到我的需要。
我正在尝试在另一个文件夹中创建多个文件夹的文件夹结构。在批处理脚本循环中,文件夹的名称用逗号分隔。
我现在需要创建另一堆子文件夹,但我需要它们位于由其他列表创建的第一级子文件夹之下,并用逗号文件夹名称分隔。
示例文件夹结构
- 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
答案1
您可以使用集合创建一个变量A,B,C
,使用该1,2,3,4
集合创建另一个变量,然后将每个集合放入嵌套的为了循环并相应地迭代每个集合中的每个变量值以获取A1, A2, A3, B1, B2, B3
这些信息,以确保每个组合都被迭代。
你只需使用医学博士命令创建附加到根目录的目录组合,其中将驻留用逗号分隔的 A 组的主要子文件夹。
脚本示例
确保将 RootDir=
值设置为包含设置为变量的组 A 列表文件夹的父文件夹的完整路径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
给定一个布局,例如:
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"
仅创建第二和第三个文件夹(因为Main Folder
已经存在)。
正如您所指出的,您需要使用特殊字符(空格和逗号),因此需要用引号将每个命令括起来(如图所示)。对于文件夹没有任何特殊字符(例如Folder1\Folder2
),不需要引号。
我没有包含驱动器号,因为我假设 .bat 文件将位于与您想要创建Main Folder
及其子文件夹相同的目录中。
答案3
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
对每个子文件夹重复此部分
答案4
另一种方法是:
mkdir -p main_folder/{bio,gallery,home,howto,infofeeds,links,projects}/{static,templates}