我有一个批处理文件,当前将每个文件放在一个文件夹中,并带有文件名。但它只适用于我所在的文件夹。我希望在我的目录顶部有一个批处理文件,它只会执行文件2子文件夹。目录示例:
/Parent folder **This is where I want my batch file**
/Subfolder 1
/Subfolder 1A/file.jpg **Level I want batch file to execute**
/Subfolder 1B/file.mp4 **Level I want batch file to execute**
/Subfolder 1C/file.mp3 **Level I want batch file to execute**
/Subfolder 2
/Subfolder 2A/file.jpg **Level I want batch file to execute**
/Subfolder 2B/file.mp4 **Level I want batch file to execute**
/Subfolder 2C/file.mp3 **Level I want batch file to execute**
这是我当前的批处理文件:
@echo off
for %%a in (*.*) do (
md "%%~na" 2>nul
move "%%a" "%%~na"
)
答案 0 :(得分:1)
使用带有/ D选项的FOR循环来迭代文件夹,根据需要重复多个级别。在每一步使用PUSHD,这样您就不必跟踪完整路径。
@echo off
for /d %%a in (*) do (
pushd "%%a"
for /d %%b in (*) do (
pushd "%%b"
for %%c in (*) do (
md "%%~nc" 2>nul
move "%%c" "%%~nc"
)
popd
)
popd
)
您可以使用%~dp0
保证从批处理脚本的父文件夹开始:
@echo off
for /d %%a in ("%~dp0*") do (
pushd "%%a"
for /d %%b in (*) do (
pushd "%%b"
for %%c in (*) do (
md "%%~nc" 2>nul
move "%%c" "%%~nc"
)
popd
)
popd
)
随着您添加更多关卡,代码变得乏味。您可以使用递归编写更多通用代码,这些代码可以轻松更改为在任何子文件夹深度下工作。只需根据需要更改深度值。请注意如何在嵌套的FOR循环中重复使用字母。
@echo off
setlocal disableDelayedExpansion
set depth=2
:iterateFolders
setlocal
set /a depth-=1
for /d %%F in (*) do (
pushd "%%F"
if %depth% gtr 0 (
call :iterateFolders
) else for %%F in (*) do (
md "%%~nF" 2>nul
move "%%F" "%%~nF"
)
popd
)
exit /b