You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改批处理代码提取PDF文件名中的数字并写入TXT?

要实现只提取PDF文件名里的数字,你需要在原有批处理代码基础上添加数字提取逻辑——因为批处理没有原生正则支持,我们可以用两种实用的方式来搞定:

方案1:逐个字符筛选数字(推荐,兼容性强)

这个方法会逐个检查文件名的每个字符,只保留0-9的数字,不管文件名里有什么特殊符号都能准确提取:

@echo off
setlocal enabledelayedexpansion

:: 定义目标桌面路径和输出TXT路径
set "desktopPath=C:\Users\asd123\Desktop\"
set "outputTxt=%desktopPath%file_names.txt"

:: 先清空输出文件(避免重复追加旧内容)
echo. > "%outputTxt%"

:: 遍历桌面所有PDF文件
for %%a in ("%desktopPath%*.pdf") do (
    set "fileName=%%~na"  :: 获取不含后缀的文件名(比如"qwerty - 123")
    set "extractedDigits="  :: 初始化存储数字的变量

    :: 逐个读取文件名的每个字符
    for /l %%i in (0,1,99) do (
        :: 如果取到空字符,说明遍历完文件名了,跳出循环
        if "!fileName:~%%i,1!"=="" goto :endCharCheck
        
        set "currentChar=!fileName:~%%i,1!"
        :: 检查当前字符是否为数字
        echo !currentChar! | findstr /r "^[0-9]$" >nul
        if not errorlevel 1 (
            :: 是数字就追加到结果变量里
            set "extractedDigits=!extractedDigits!!currentChar!"
        )
    )
    :endCharCheck

    :: 只有提取到数字时才写入文件,避免空行
    if defined extractedDigits echo !extractedDigits! >> "%outputTxt%"
)

endlocal
pause

关键细节说明:

  • setlocal enabledelayedexpansion:必须开启延迟扩展,才能在循环里实时更新变量值
  • %%~na:批处理内置语法,用来获取文件的「不含后缀的文件名」
  • findstr /r "^[0-9]$":用正则匹配单个数字,判断字符是否符合要求

方案2:批量替换非数字字符(简洁版,适合已知非数字类型的场景)

如果你的PDF文件名里只有空格、字母、-_这类固定的非数字字符,可以用批量替换的方式快速清理掉非数字内容:

@echo off
setlocal enabledelayedexpansion

set "desktopPath=C:\Users\asd123\Desktop\"
set "outputTxt=%desktopPath%file_names.txt"
echo. > "%outputTxt%"

for %%a in ("%desktopPath%*.pdf") do (
    set "fileName=%%~na"
    set "onlyDigits=!fileName!"

    :: 替换所有空格为空
    set "onlyDigits=!onlyDigits: =!"
    :: 替换所有大小写字母为空
    for %%l in (a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) do (
        set "onlyDigits=!onlyDigits:%%l=!"
    )
    :: 替换常见符号(可根据你的实际文件名补充其他符号)
    for %%s in (- _) do (
        set "onlyDigits=!onlyDigits:%%s=!"
    )

    if not "!onlyDigits!"=="" echo !onlyDigits! >> "%outputTxt%"
)

endlocal
pause

注意事项:

如果文件名里有其他特殊符号(比如@#$),需要在符号替换的循环里补充对应的符号,否则这些符号会被保留下来。

把上面任意一段代码保存成.bat文件运行,就能得到只包含PDF文件名中数字的TXT文件了。

内容的提问来源于stack exchange,提问作者BlueArt

火山引擎 最新活动