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

Tom*_*Tom 12 windows batch-file

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

例子 :

起始文件夹:

Dog.jpg
Cat.jpg
Run Code Online (Sandbox Code Playgroud)

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

for %i in (*) do md "%~ni"
Run Code Online (Sandbox Code Playgroud)

结果文件夹:

\Dog\
\Cat\
Dog.jpg
Cat.jpg
Run Code Online (Sandbox Code Playgroud)

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

我想要实现的是:

\Dog\Dog.jpg
\Cat\Cat.jpg
Run Code Online (Sandbox Code Playgroud)

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

LPC*_*hip 12

第二个命令是

for %i in (*) do move "%i" "%~ni"
Run Code Online (Sandbox Code Playgroud)

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

  • 接下来我会说 A) 可以将它们组合起来 - `for %i in (*) do cmda && cmdb` B) 可以先回显 `for %i in (*) do @ECHO cmda && cmdb` C) 可以添加我认为通过子目录是 /R 。 (4认同)
  • 当文件名包含空格时,此命令将不起作用。你应该使用这样的东西:`for %i in (*) do move "%~i" "%~ni"` 即使这样可能还不够好,因为当目标文件夹不存在时它会产生副作用(例如,文件被“移动”到自身之上,因此重命名)。一个简单的解决方案是组合这两个命令,如下所示:`for %i in (*) do md "%~ni" && move "%~i" "%~ni"` 该命令假定目录不已经存在。 (3认同)
  • 此外,为了扩展 barlop 的评论,当您使用 `cmda && cmdb` 时,只有在 `cmda` 成功时才会执行 `cmdb`。如果您改用 `cmda & cmdb`,则无论如何都会执行第二个命令。事实上,单个与号 (`&`) 只是一个命令分隔符,而双与号 (`&&`) 是一个 *条件* 分隔符。未设置 `errorlevel` 值的命令不应与后者一起使用。 (2认同)

小智 10

只需连续执行这些命令:

为每个文件创建文件夹:

for %i in (*) do mkdir "%~ni"
Run Code Online (Sandbox Code Playgroud)

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

for %i in (*) do move "%i" "%~ni"
Run Code Online (Sandbox Code Playgroud)