[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] [已解决]批处理能实现检测文件名是否含中文?

本帖最后由 liaoguinan 于 2023-8-12 14:19 编辑



如图,如何遍历多层文件夹下的PDF文件名是否有中文,如果纯数字的文件名则记录路径,并把文件路径记录到记事本,带有中文的文件则不记录
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 aloha20200628 于 2023-12-27 10:44 编辑


如果文件命名中除中文字符+英文+数字以外仅采用某些有限的键盘可见字符,如》.-_@#$[]{}',;=`~+()  这些可选字符排除了批处理脚本运行期容易‘作祟’的那些转义字符。
满足上述命名条件,就可用findstr准确识别文件名中有无中文字符,示例代码如下:
  1. echo,abc.中文_123|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul&&echo,有汉字||echo,无汉字
  2. echo,zxc-123.xyz|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul&&echo,有汉字||echo,无汉字
  3. echo,中文|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul&&echo,有汉字||echo,无汉字
复制代码
假设1楼的 *.pdf 文件命名满足上述条件,则可试用如下代码
  1. @echo off
  2. (for /f "delims=" %%F in ('dir /b/s/a-d *.pdf') do (
  3. echo,%%~nF|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul || echo,%%F
  4. ))>new.txt
  5. exit/b
复制代码
假设10楼的 *.pdf 文件命名也满足上述条件,则可试用如下代码
  1. @echo off
  2. set newD="d:\中文名PDF目录"
  3. md %newD% 2>nul
  4. for /f "delims=" %%F in ('dir /b/s/a-d *.pdf') do (
  5.     echo,%%~nF|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul && copy /y "%%~F" %newD%
  6. )
  7. exit/b
复制代码

TOP

遍历多层文件夹下的PDF文件名是否有中文,然后把含有中文的拷贝到指定目录呢

TOP

本帖最后由 qixiaobin0715 于 2023-12-25 14:31 编辑

如果确实要记录文件名为纯数字的文件的话,就简单多了:
  1. dir /b /s /a-d *.pdf|findstr /e \\[0-9][0-9]*\.pdf>out.txt
复制代码

TOP


试试这个版本...
  1. @echo off &setlocal enabledelayedexpansion
  2. (for /f "delims=" %%F in ('dir /b/s/a-d *.pdf') do (
  3. set "s=%%~nF"
  4. for %%n in (0 1 2 3 4 5 6 7 8 9) do if defined s (set "s=!s:%%n=!")
  5. if not defined s (echo,%%F)
  6. ))>new.txt
  7. endlocal &pause &exit/b
复制代码
1

评分人数

TOP

回复 3# liaoguinan
顶楼配图及描述与实际需求不一致,“纯数字”一般人会理解为全部由数字构成。这样勉强能用,不过不是很精确:
  1. @echo off
  2. (for /f "delims=" %%i in ('dir /b /s /a-d *.pdf') do (
  3.     for /f "delims=" %%j in ('echo,"%%~nxi"^|findstr /r /v /c:"[^- '!-Z]"') do echo,%%i
  4. ))>out.txt
  5. pause
复制代码
代码保存为ANSI编码。
1

评分人数

    • liaoguinan: 感谢这个版本可以实现检测除了中文,数字+字 ...技术 + 1

TOP

  1. powershell "dir -Recurse *.pdf|?{($_.BaseName -replace '[^0-9]','').Length -eq $_.BaseName.Length}|%{$_.FullName>>2.txt}"
复制代码
匹配纯数字  这样看看

TOP

本帖最后由 pd1 于 2023-8-12 00:14 编辑
  1. powershell "dir -Recurse *.pdf|?{$_.Name -notmatch '[\u4e00-\u9fa5]'}|%{$_.FullName>>2.txt}"
复制代码
不含中文就这样  如果还有字幕或者.-这些不行

TOP

本帖最后由 hlzj88 于 2023-8-11 23:43 编辑
  1. for /f "delims=" %%i in ('dir /b/s/on *.pdf') do echo %%~fi>>1.txt
  2. grep -Pv "[\x80-\xFF]" 1.txt > 2.txt
复制代码
grep下载地址:
http://bcn.bathome.net/s/tool/index.html?key=grep

第二句是论坛找来的,,能力有限,,路径不能带中文
目的,学习批处理

TOP

回复 2# hlzj88


    大佬如果数字文件名1.2.A1-0001-1是这样的不含中文能检测吗?好像检测不出来

TOP

  1. for /f "delims=" %%i in ('dir /b/s/on *.pdf') do set /a vv=%%~ni-1&&echo %%~fi>>2.txt
复制代码
简单测试可以使用,
目的,学习批处理

TOP

返回列表