我想创建一个批处理文件,在dir中搜索名称为10个字符的所有.pdf文件,因为我们有很多.pdf,名称中包含不同的字符,所以我需要对它们进行排序将它们移动(剪切并粘贴)到准备好的第二个目录。你能帮我解决这个批处理文件吗?
例如
setdir测试包含.pdfs
--+6570296402-1-982464371-120.pdf
+6581239585-1-982470028-120.pdf
5710101306.pdf
0-PZ-6562825.pdf
0-PZ-545515247-1-982466351-120.pdf
5455152471.pdf
结果:
target dir - test2 - 需要移动.pdf,包含10个字符
5710101306.pdf
5455152471.pdf
etc
非常感谢
答案 0 :(得分:2)
从当前目录运行,您可以使用Where
和Move
执行此操作:
@Echo Off
For /F "Delims=" %%A In ('Where/F .:??????????.pdf'
) Do Move /Y %%A "Test2">Nul
答案 1 :(得分:0)
(for /f "delims=" %%a in ('dir /b /a-d *.pdf') do call :select10 "%%a") >filename.txt
... more processing if required
goto :eof
:select10
set "name=%~n1"
set "name=%name:~9%"
if not defined name goto :eof
set "name=%name:~1%"
if not defined name echo %~1
goto :eof
这应该可以解决问题。
执行dir
*.pdf
列表,仅选择文件名。如果文件名中有空格,则将找到的文件名传递给子例程:select10
,引号中。
子例程首先将name
设置为接收的文件名的名称部分,然后删除前9个字符。如果结果为空变量,请跳至文件结尾。如果没有,请选择除第一个字符外的所有字符如果结果不是空字符串,则名称必须是11个或更多字符 - 如果它为空,则echo
在第一个实例中传递名称。
for
命令周围的括号将导致echo
ed数据累积到指定的文件中。
如果您要将文件移至目的地,而不是简单地列出选择,请在(
之前移除for
,然后移除) >filename.txt
并替换echo
与move "%1" destination\
您也可以在不使用子程序的情况下执行相同的操作: for / f %% a in(' dir / b / a-d * .pdf')do( set" name = %% ~na" setlocal enabledelayedexpansion set" name =!name:~9!" 如果定义了名称( set" name =!name:~1!" 如果没有定义名称移动" %% a"目的地\ ) ENDLOCAL )
使用delayed expansion
处理子字符串操作。