我有这段代码
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个字母的所有内容移动到正确的文件夹中。
所以我不需要它来创建目录,而是将其移动到已创建的目录。
答案 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
命令。