我有一个名为“Parts”的文件目录。在该文件夹中,我需要运行批处理文件来将文件移动到正确的文件夹中。示例
12345 test.pdf
12345 test.jpg
12346 test.pdf
12345 Folder
12346 Folder
如果文件名以文件夹编号开头,则将其移动到该文件夹中。文件夹将始终优先设置。
答案1
代码解释
- 使用一个 for 来迭代文件夹内容
%%A
,其模式至少包含一个空格。 - 还
for /f
需要将名称分成%%A
两部分,一部分在第一个空格tokens=1
=之前%%B
,其余部分在tokens *
=%%C
。 - 将原始文件移动
%%A
到%%B
名为%%C
@Echo off
Pushd "Folder path"
for %%A in ("* *.*") do for /f "tokens=1*" %%B in ("%%A") do (
Move "%%A" "%%B\%%C"
)
popd
答案2
答案考虑了以下评论:这仅在数字后面有空格时才有效。我需要一个可以始终计算前 5 位数字并以此为基础的东西。-@布兰登·赫斯特
所以,我有限的英语水平无法帮助解释这段代码以及机械师在这里应用来完成这项工作......
嗯,基本上,这会在 dir 命令中取出文件,并通过 cmd/u 获取以 unicode 格式/布局回显的前五个字符,并使用 findstr 过滤器仅获取数字,之后检查文件夹是否匹配/存在,如果为肯定,则此代码会将这些文件复制到同一个文件夹中,其中五个第一个字符串...
@echo off && setlocal EnableDelayedExpansion & title <nul & call title ..\%~nx0
cd/d "%~dp0" && for /f tokens^=*eol^=* %%i in ('dir /b/a:-d .\*.* ^|find/v "%0"
')do set "_f=%%~ni" && set "_fc=%%~fi" && set "_N=" && set "_at5=!_f:~,5!" && (
for /f %%N in ('cmd /u/c "echo=!_at5!^<nul|findstr [0-9]"')do set "_N=!_N!%%~N"
if exist "!_N!\." echo=!_fc! ^> .\!_N!\%%~nxi &cmd/v/cmove "!_fc!" "!_N!\">nul)
rem./ you can put/do some more tasks here in your bat... && endlocal && exit /b
- 输出:
G:\SUPER_USER\Q1507690\54321testX.pdf > .\54321\54321testX.pdf
G:\SUPER_USER\Q1507690\54321-test.jpg > .\54321\54321-test.jpg
G:\SUPER_USER\Q1507690\12345 test.jpg > .\12345\12345 test.jpg
G:\SUPER_USER\Q1507690\12345,test.pdf > .\12345\12345,test.pdf
G:\SUPER_USER\Q1507690\12346 test.jpg > .\12346\12346 test.jpg
G:\SUPER_USER\Q1507690\12346.test.pdf > .\12346\12346.test.pdf
G:\SUPER_USER\Q1507690\12346_test.jpg > .\12346\12346_test.jpg
观察:当一些朋友帮助我学习英语时,我会尝试更新,所以,真的很抱歉我的英语水平有限......