Batch file 将文件放入文件夹的批处理文件(仅子文件夹)
我有一个批处理文件,当前将每个文件放在一个带有文件名的文件夹中。但是,它只适用于我所在的文件夹。我想有一个批处理文件在我的目录顶部,将只执行文件2子文件夹下来。目录示例:Batch file 将文件放入文件夹的批处理文件(仅子文件夹),batch-file,Batch File,我有一个批处理文件,当前将每个文件放在一个带有文件名的文件夹中。但是,它只适用于我所在的文件夹。我想有一个批处理文件在我的目录顶部,将只执行文件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 **
/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"
)
使用带有/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
您希望批处理文件具体执行什么操作?我希望它将每个文件放入与该文件同名的文件夹中。我的当前批处理文件只能在当前文件夹中执行此操作。例如,您希望
子文件夹1A中的file.jpg
进入子文件夹1A/file/
?正确的是,可以将批处理文件放在父文件夹目录的顶部吗?非常感谢dbenham它工作了,这将节省很多钱时间的问题。