我有一个名为“Finals”的主文件夹,其中包含 40 个子文件夹(所有文件夹的名称中都有空格),我想在每个子文件夹中执行以下操作
mkdir Blank_Mockup\Option_1 Blank_Mockup\Option_2 Blank_Mockup\Option_3 Blank_Mockup\Option_4 Blank_Mockup\Option_5 Blank_Mockup\Option_6 Designed_Mockup\Option_1 Designed_Mockup\Option_2 Designed_Mockup\Option_3 Designed_Mockup\Option_4 Designed_Mockup\Option_5 Designed_Mockup\Option_6 Flat_File\Option_1 Flat_File\Option_2 Flat_File\Option_3 Flat_File\Option_4 Flat_File\Option_5 Flat_File\Option_6 Working_File\Option_1 Working_File\Option_2 Working_File\Option_3 Working_File\Option_4 Working_File\Option_5 Working_File\Option_6
以上创建了以下文件夹结构:
|
├───Blank_Mockups
│ ├───Option 1
│ ├───Option 2
│ ├───Option 3
│ ├───Option 4
│ ├───Option 5
│ └───Option 6
|
├───Designed_Mockups
│ ├───Option 1
│ ├───Option 2
│ ├───Option 3
│ ├───Option 4
│ ├───Option 5
│ └───Option 6
我想做的是,在 40 个子文件夹中分别运行上述命令。我尝试使用此处其他帖子中的一些答案进行以下操作,但它陷入了循环,命令一直在新创建的文件夹中执行。
pushd "D:\Users\blend\OneDrive\Freelance\SwagMagic\Final"
for /f "Delims=" %%i in ('dir /ad /b') do (
cd "%%i"
mkdir Blank_Mockup\Option_1 Blank_Mockup\Option_2 Blank_Mockup\Option_3 Blank_Mockup\Option_4 Blank_Mockup\Option_5 Blank_Mockup\Option_6 Designed_Mockup\Option_1 Designed_Mockup\Option_2 Designed_Mockup\Option_3 Designed_Mockup\Option_4 Designed_Mockup\Option_5 Designed_Mockup\Option_6 Flat_File\Option_1 Flat_File\Option_2 Flat_File\Option_3 Flat_File\Option_4 Flat_File\Option_5 Flat_File\Option_6 Working_File\Option_1 Working_File\Option_2 Working_File\Option_3 Working_File\Option_4 Working_File\Option_5 Working_File\Option_6
)
popd
答案1
一个简单的解决方案是使用以下命令返回(“向上”)到循环中的父目录cd ..
:
pushd "D:\Users\blend\OneDrive\Freelance\SwagMagic\Final"
for /f "Delims=" %%i in ('dir /ad /b') do (
cd "%%i"
mkdir Blank_Mockup\Option_1 Blank_Mockup\Option_2 Blank_Mockup\Option_3 Blank_Mockup\Option_4 Blank_Mockup\Option_5 Blank_Mockup\Option_6 Designed_Mockup\Option_1 Designed_Mockup\Option_2 Designed_Mockup\Option_3 Designed_Mockup\Option_4 Designed_Mockup\Option_5 Designed_Mockup\Option_6 Flat_File\Option_1 Flat_File\Option_2 Flat_File\Option_3 Flat_File\Option_4 Flat_File\Option_5 Flat_File\Option_6 Working_File\Option_1 Working_File\Option_2 Working_File\Option_3 Working_File\Option_4 Working_File\Option_5 Working_File\Option_6
cd ..
)
popd
解释
[欢迎提出技术修正/批评。]
dir /ad /b
返回当前目录(例如)的一组裸文件夹名称Folder 1
,Folder 2
例如,。因此,在每次循环迭代中将对应于例如,,,。Folder 3
Final
%%i
Folder 1
Folder 2
Folder 3
Folder ...
cd %%i
当您在循环中调用时,这与调用以下代码相同:cd Folder 1
或当前的值
%%i
。也就是说,你是改变目录只需指定文件夹名称即可cd
。假定此文件夹位于您正在处理的当前目录中。开始于:
D:\Users\blend\OneDrive\Freelance\SwagMagic\Final
在第一个循环中,调用
cd Folder 1
与调用相同,例如:cd D:\Users\blend\OneDrive\Freelance\SwagMagic\Final\Folder 1
但是,在第二个循环中,当前目录仍然是:
D:\Users\blend\OneDrive\Freelance\SwagMagic\Final\Folder 1
从使用 cd 更改目录在第一个循环中使用
cd %%i
/ 。因此,在(第二个)循环中调用与调用或调用相同,例如:cd Folder 1
cd %%i
cd Folder 2
cd D:\Users\blend\OneDrive\Freelance\SwagMagic\Final\Folder 1\Folder 2
但可能没有
D:\Users\blend\OneDrive\Freelance\SwagMagic\Final\Folder 1\Folder 2
所以你很可能会收到错误。
为了解决这个问题,您可以将目录改回例如:
D:\Users\blend\OneDrive\Freelance\SwagMagic\Final
在执行下一个循环之前,然后
cd %%i
。在每个循环结束时,您可以cd
使用转到父目录..
。因此,如果批处理文件当前正在运行:D:\Users\blend\OneDrive\Freelance\SwagMagic\Final\Folder 1
第一次循环之后,调用
cd ..
与调用相同:cd D:\Users\blend\OneDrive\Freelance\SwagMagic\Final
这意味着下一次调用
cd %%i
(例如cd Folder 2
)应该可以正常工作,并且相当于例如:cd D:\Users\blend\OneDrive\Freelance\SwagMagic\Final\Folder 2