Batch file 将不同子文件夹中的文件分别批量上移一级
我有数百个文件夹,其结构如下:Batch file 将不同子文件夹中的文件分别批量上移一级,batch-file,batch-processing,Batch File,Batch Processing,我有数百个文件夹,其结构如下: PARENT\FolderA\Subfolder01\files1.iso PARENT\FolderB\Subfolder02\files2.iso PARENT\FolderC\Subfolder03\files3.iso 我想将所有files1.iso,files2.iso,files3.iso分别上移一级。应该是这样的 PARENT\FolderA\files1.iso PARENT\FolderB\files2.iso PARENT\FolderC
PARENT\FolderA\Subfolder01\files1.iso
PARENT\FolderB\Subfolder02\files2.iso
PARENT\FolderC\Subfolder03\files3.iso
files1.iso
,files2.iso
,files3.iso
分别上移一级。应该是这样的
PARENT\FolderA\files1.iso
PARENT\FolderB\files2.iso
PARENT\FolderC\files3.iso
子文件夹01
、子文件夹02
、子文件夹03
如果可能,还可以将那些files1.iso
,files2.iso
,files3.iso
分别批量重命名为FolderA.iso
,FolderB.iso
,FolderC.iso
我真的不知道怎么解决这个问题。有人能帮忙吗
cd PARENT
for /D %%i in (*) do (
for /D %%j in (%%i\*) do (
move "%%j\*" "%%i\%%i.iso" 2>&1>nul && rmdir "%%j" 2>&1>nul
)
)
解释:
cd PARENT
只要确保你在根目录下工作,其他的就可以了
for /D %%i in (*) do (
这是一个for循环,对于工作目录中的每个目录,它将%%i设置为目录名(例如FolderA),然后执行以下操作:
for /D %%j in (%%i\*) do (
move "%%j\*.iso" "%%i\%%i.iso" 2>&1>nul && rmdir "%%j" 2>&1>nul
这是一个嵌套的for循环,对于%%i(在第一个循环中,FolderA)中的每个目录,它将%%j设置为目录名(在第一个循环中,FolderA\Subfolder01),然后执行以下操作:
for /D %%j in (%%i\*) do (
move "%%j\*.iso" "%%i\%%i.iso" 2>&1>nul && rmdir "%%j" 2>&1>nul
将%%j(FolderA\Subfolder01)中名称以.iso
结尾的所有内容移动到%%i(FolderA),并将其重命名为%%i.iso(FolderA.iso)。如果有效,请删除%%j目录。将所有输出重定向到nul
(即不产生输出)
关闭循环。我真的搞不清楚可能重复的循环。除父文件夹外,我的所有文件夹都有不同的名称。另一个相关问题:@JeffZeitlin第二个问题的唯一答案是错误的,只是注释有帮助。我刚刚尝试了这个。它起了部分作用。它只对第一个文件夹有效。第二个文件夹和其余文件夹不工作。然后我从头再做一次,它不再工作了。你的移动命令将包括任何扩展名,而不仅仅是.iso。我还将仅在移动成功时执行rmdir,并将输出重定向到2&>1>nul,这样未删除的非空目录就不会激怒用户。当您无法知道路径是否包含空格等字符时,一定要在路径周围包含双引号。例如:
“%%i\*”
,“%%j\*”
,“%%i\%%i.iso”
和“%%j”
。建议在未知的当前目录中使用CD
命令时,将/D
选项与完整路径一起使用,如果没有完整路径,如果目标目录位于不同的驱动器上,更改将不会按预期进行。@Compo yes,非常感谢。你拯救了这一天。问题已解决。@genzi0401将内部两行更改为移动“%%j\*.iso”“%%i\%%i.iso”2>&1>nul&&rmdir“%%j”2>&1>nul
很抱歉,其他注释的重定向错误。