批处理文件 - 按字符数搜索

时间:2017-06-27 09:23:10

标签: batch-file

我想创建一个批处理文件,在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

非常感谢

2 个答案:

答案 0 :(得分:2)

从当前目录运行,您可以使用WhereMove执行此操作:

@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并替换echomove "%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处理子字符串操作。