Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 将不同子文件夹中的文件分别批量上移一级_Batch File_Batch Processing - Fatal编程技术网

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
很抱歉,其他注释的重定向错误。