CMD命令为每个文件创建文件夹并将文件移动到文件夹


10

我需要一个可以从命令行运行的命令,以便为目录中的每个文件创建一个文件夹(基于文件名),然后将其移动到新创建的文件夹中。

范例:

起始文件夹:

Dog.jpg
Cat.jpg

以下命令非常适合为当前工作目录中的每个文件名创建一个文件夹。

for %i in (*) do md "%~ni"

结果文件夹:

\Dog\
\Cat\
Dog.jpg
Cat.jpg

我需要更进一步,将文件移到该文件夹​​中。

我要实现的是:

\Dog\Dog.jpg
\Cat\Cat.jpg

有人可以用一个命令帮助我完成所有这一切吗?

Answers:


10

第二个命令是

for %i in (*) do move "%i" "%~ni"

编辑:根据and31415的注释,为%i添加了“”。tnx。


4
接下来,我会说A)可以将它们组合for %i in (*) do cmda && cmdb -B)可以先回显for %i in (*) do @ECHO cmda && cmdb C)可以添加我认为是/ R可以通过子目录。
barlop

2
文件名包含空格时,此命令将不起作用。您应该使用类似这样的方法:for %i in (*) do move "%~i" "%~ni"即使这样可能还不够好,因为当目标文件夹不存在时它可能会产生副作用(例如,文件被“移动”到自己上方,因此被重命名)。一个简单的解决方案是将这两个命令组合在一起,如下所示:for %i in (*) do md "%~ni" && move "%~i" "%~ni"该命令假定目录不存在。
and31415 2014年

2
此外,为了扩大barlop的评论,当你用cmda && cmdb那么cmdb只有将执行cmda成功。如果要使用它cmda & cmdb,则无论如何都会执行第二个命令。实际上,单个&号&只是命令分隔符,而双&号&&有条件的。未设置errorlevel值的命令不应与后者一起使用。
and31415 2014年

5

只需依次执行以下命令:

为每个文件创建文件夹:

for %i in (*) do mkdir "%~ni"

要将每个文件移动到其文件夹:

for %i in (*) do move "%i" "%~ni"

1
欢迎来到超级用户!这将重复另一个答案,并且不会添加任何新内容。除非您确实有新的贡献,否则请不要发布答案。
DavidPostill

-1

如果您有一些文件夹,例如:Years \ Filename.mp4,它将执行此操作。

1901\Filename.mp4 
1902\Filename.mp4
1903\Filename.mp4

它将列出所有文件夹一级文件;列出所有* .mp4和* .mkv将创建具有文件名的2级文件夹,并将所有相同名称的文件从1级文件夹移至2级文件夹,并在Years基本文件夹中运行。

for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"

如果没有一级YEARS文件夹,则可以绕过第一步,然后运行第二步,在文件名基本文件夹中运行它。

for %i in (*.mp4,*.mkv) do mkdir "%~dpi%~ni" && move "%~dpi%~ni.*" "%~dpi%~ni\"

&&将确保先前的mkdir%ERRORLEVEL%为0以运行文件移动

要测试,请使用以下命令:

for /d %D in (*) do for %i in (%~fD\*.mp4,%~fD\*.mkv) do echo "%~dpi%~ni" && echo "%~dpi%~ni.*" "%~dpi%~ni\"

发现左文件:用于/ d%d的(*)用于%做我的(%〜FD \ *)做回声“%〜DPI%〜科幻”
奥利维奥莫拉

为/ d%d中(*)为%做i的(%〜FD \ *)做移动“%〜音响”, “d:\ TRASH \”
奥利维奥莫拉
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.