根据部分名称移动文件 - DOS / Batch

时间:2011-12-24 11:13:59

标签: file batch-file automation dos

我有这段代码

pushd "C:\Folders\"
for %%j in (*) do (
md "%%~nj"
move "%%j" "%%~nj"
)
popd
pause
exit

将具有相同名称的文件移动到具有相同名称的文件夹中,如果该文件夹不存在,则会创建新文件夹。太好了。

我遇到的这个问题是我想要与上面相同的功能但是我只是查看前4个字符。 E.g。

1234 - sample.jpg
1234 - sample-sm.jpg
1234 - sample-new.jpg
1234 - sample-right.jpg

1235 - sample.jpg

1234个文件将被移动到相同的文件夹,因为前4个字符是相同的,但是1235将被移动到新文件夹,因为字符的第一个是不同的。

谢谢


@echo off 
setlocal enabledelayedexpansion
pushd "C:\Folders\"
for %%a in (*) do (
  set fldr=%%~na
  set fldr=!fldr:~0,4!
  md "!fldr!"
  move "%%a" "!fldr!"
)
popd
pause
exit

然而,它创建了带有前4个字母的新文件夹,并将文件移动到这些创建的文件夹......它确实将前4个字母的所有内容移动到正确的文件夹中。

所以我不需要它来创建目录,而是将其移动到已创建的目录。

1 个答案:

答案 0 :(得分:2)

阅读HELP SET,然后尝试以下代码作为构建解决方案的起点......

您需要处理可能发生的重复名称。

@echo off 
setlocal enabledelayedexpansion
for %%a in (*) do (
  set fldr=%%~na
  set fldr=!fldr:~0,4!
  echo md "!fldr!"
  echo move "%%a" "!fldr!"
)

尝试,广泛测试并删除ECHO命令。