Batch file 将文件放入文件夹的批处理文件(仅子文件夹)

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 **

我有一个批处理文件,当前将每个文件放在一个带有文件名的文件夹中。但是,它只适用于我所在的文件夹。我想有一个批处理文件在我的目录顶部,将只执行文件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"
)

使用带有/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它工作了,这将节省很多钱时间的问题。