Batch file 按文件夹移动文件

Batch file 按文件夹移动文件,batch-file,cmd,move,Batch File,Cmd,Move,我有 D:\folder\1.jpg, D:\folder\2.jpg, D:\folder\3.jpg .... 诸如此类 我需要 D:\folder\1\1.jpg, D:\folder\2\1.jpg, D:\folder\3\1.jpg 此代码 FOR /R %I IN (*.jpg) DO (md %~nI; move %I %~dI%~pI%~nI\1.jpg) 创建文件夹,如D:\folder\1\1.jpg\ 我做错了什么?用这个 FOR %I IN (*.jpg) DO

我有

D:\folder\1.jpg,
D:\folder\2.jpg,
D:\folder\3.jpg
.... 诸如此类

我需要

D:\folder\1\1.jpg,
D:\folder\2\1.jpg,
D:\folder\3\1.jpg

此代码

 FOR /R %I IN (*.jpg) DO (md %~nI; move %I %~dI%~pI%~nI\1.jpg)
创建文件夹,如
D:\folder\1\1.jpg\

我做错了什么?

用这个

FOR %I IN (*.jpg) DO (
  MD %~nI & copy %I %~nI\1.jpg & del %I)

对连续命令使用
。另外,在中,您不能重命名,因此我只需使用
copy
您的命令创建文件夹,如
D:\folder\1\1.jpg\
,因为
是参数分隔符,不能用于菊花链命令。对于后者,您必须使用
&

您的命令还有其他几个问题

  • 在当前工作目录(
    md%I
    )中创建目标文件夹,然后使用完整路径(
    %~dI%~pI%~nI\1.jpg
    )移动文件。只要当前工作目录中有包含.jpg文件的子文件夹,此操作就会失败
  • 您不引用变量,因此当路径或文件名包含空格时,该命令也将失败
  • 将文件移动到子文件夹会创建一个递归文件夹遍历的无休止循环(
    for/r
我建议运行两个单独的循环,一个用于创建目标文件夹,另一个用于移动文件:

for /r %I in (*.jpg) do @mkdir "%~dpnI"
for /r %I in (*.jpg) do @move "%~fI" "%~dpnI\1%~xI"

这样做。产生错误,但它可以工作<代码>用于(*.jpg)DO中的/R%I(md%~nI&move%I%~dpI%~nI\1.jpg)