按文件夹移动文件

时间:2013-02-25 06:13:10

标签: batch-file cmd move

我有

  

d:\文件夹\ 1.JPG,
  d:\文件夹\ 2.JPG,
  d:\文件夹\ 3.JPG
  ....等等

我需要

  

d:\文件夹\ 1 \ 1.JPG,
  d:\文件夹\ 2 \ 1.JPG,
  d:\文件夹\ 3 \ 1.JPG
  ....

此代码

 FOR /R %I IN (*.jpg) DO (md %~nI; move %I %~dI%~pI%~nI\1.jpg)

创建D:\folder\1\1.jpg\

等文件夹

我做错了什么?

2 个答案:

答案 0 :(得分:0)

使用此

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

使用&来管道连续命令。同样在move中你无法重命名,所以我只使用copy

答案 1 :(得分:0)

您的命令会创建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"