找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24926|回复: 10

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

[复制链接]
发表于 2023-8-11 20:27:17 | 显示全部楼层 |阅读模式
本帖最后由 liaoguinan 于 2023-8-12 14:19 编辑



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

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2023-8-11 22:40:11 | 显示全部楼层
  1. for /f "delims=" %%i in ('dir /b/s/on *.pdf') do set /a vv=%%~ni-1&&echo %%~fi>>2.txt
复制代码
简单测试可以使用,
 楼主| 发表于 2023-8-11 23:23:59 | 显示全部楼层
回复 2# hlzj88


    大佬如果数字文件名1.2.A1-0001-1是这样的不含中文能检测吗?好像检测不出来
发表于 2023-8-11 23:40:17 | 显示全部楼层
本帖最后由 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

第二句是论坛找来的,,能力有限,,路径不能带中文
发表于 2023-8-12 00:07:01 | 显示全部楼层
本帖最后由 pd1 于 2023-8-12 00:14 编辑
  1. powershell "dir -Recurse *.pdf|?{$_.Name -notmatch '[\u4e00-\u9fa5]'}|%{$_.FullName>>2.txt}"
复制代码
不含中文就这样  如果还有字幕或者.-这些不行
发表于 2023-8-12 00:19:19 | 显示全部楼层
  1. powershell "dir -Recurse *.pdf|?{($_.BaseName -replace '[^0-9]','').Length -eq $_.BaseName.Length}|%{$_.FullName>>2.txt}"
复制代码
匹配纯数字  这样看看
发表于 2023-8-12 09:47:27 | 显示全部楼层
回复 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技术 +1 收起 理由
liaoguinan + 1 感谢这个版本可以实现检测除了中文,数字+字 ...

查看全部评分

发表于 2023-8-12 12:24:08 | 显示全部楼层

试试这个版本...

  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技术 +1 收起 理由
liaoguinan + 1 感谢此方案也可以

查看全部评分

发表于 2023-8-12 16:30:55 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2023-12-25 14:31 编辑

如果确实要记录文件名为纯数字的文件的话,就简单多了:
  1. dir /b /s /a-d *.pdf|findstr /e \\[0-9][0-9]*\.pdf>out.txt
复制代码
发表于 2023-12-25 10:19:06 | 显示全部楼层
遍历多层文件夹下的PDF文件名是否有中文,然后把含有中文的拷贝到指定目录呢
发表于 2023-12-27 00:02:46 | 显示全部楼层
本帖最后由 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
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 06:36 , Processed in 0.023514 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表