标题: [文件操作] [已解决]批处理能实现检测文件名是否含中文? [打印本页]
作者: liaoguinan 时间: 2023-8-11 20:27 标题: [已解决]批处理能实现检测文件名是否含中文?
本帖最后由 liaoguinan 于 2023-8-12 14:19 编辑
如图,如何遍历多层文件夹下的PDF文件名是否有中文,如果纯数字的文件名则记录路径,并把文件路径记录到记事本,带有中文的文件则不记录
作者: hlzj88 时间: 2023-8-11 22:40
- for /f "delims=" %%i in ('dir /b/s/on *.pdf') do set /a vv=%%~ni-1&&echo %%~fi>>2.txt
复制代码
简单测试可以使用,
作者: liaoguinan 时间: 2023-8-11 23:23
回复 2# hlzj88
大佬如果数字文件名1.2.A1-0001-1是这样的不含中文能检测吗?好像检测不出来
作者: hlzj88 时间: 2023-8-11 23:40
本帖最后由 hlzj88 于 2023-8-11 23:43 编辑
- for /f "delims=" %%i in ('dir /b/s/on *.pdf') do echo %%~fi>>1.txt
- grep -Pv "[\x80-\xFF]" 1.txt > 2.txt
复制代码
grep下载地址:
http://bcn.bathome.net/s/tool/index.html?key=grep
第二句是论坛找来的,,能力有限,,路径不能带中文
作者: pd1 时间: 2023-8-12 00:07
本帖最后由 pd1 于 2023-8-12 00:14 编辑
- powershell "dir -Recurse *.pdf|?{$_.Name -notmatch '[\u4e00-\u9fa5]'}|%{$_.FullName>>2.txt}"
复制代码
不含中文就这样 如果还有字幕或者.-这些不行
作者: pd1 时间: 2023-8-12 00:19
- powershell "dir -Recurse *.pdf|?{($_.BaseName -replace '[^0-9]','').Length -eq $_.BaseName.Length}|%{$_.FullName>>2.txt}"
复制代码
匹配纯数字 这样看看
作者: qixiaobin0715 时间: 2023-8-12 09:47
回复 3# liaoguinan
顶楼配图及描述与实际需求不一致,“纯数字”一般人会理解为全部由数字构成。这样勉强能用,不过不是很精确:- @echo off
- (for /f "delims=" %%i in ('dir /b /s /a-d *.pdf') do (
- for /f "delims=" %%j in ('echo,"%%~nxi"^|findstr /r /v /c:"[^- '!-Z]"') do echo,%%i
- ))>out.txt
- pause
复制代码
代码保存为ANSI编码。
作者: aloha20200628 时间: 2023-8-12 12:24
试试这个版本...- @echo off &setlocal enabledelayedexpansion
- (for /f "delims=" %%F in ('dir /b/s/a-d *.pdf') do (
- set "s=%%~nF"
- for %%n in (0 1 2 3 4 5 6 7 8 9) do if defined s (set "s=!s:%%n=!")
- if not defined s (echo,%%F)
- ))>new.txt
- endlocal &pause &exit/b
复制代码
作者: qixiaobin0715 时间: 2023-8-12 16:30
本帖最后由 qixiaobin0715 于 2023-12-25 14:31 编辑
如果确实要记录文件名为纯数字的文件的话,就简单多了:- dir /b /s /a-d *.pdf|findstr /e \\[0-9][0-9]*\.pdf>out.txt
复制代码
作者: QQ00124659 时间: 2023-12-25 10:19
遍历多层文件夹下的PDF文件名是否有中文,然后把含有中文的拷贝到指定目录呢
作者: aloha20200628 时间: 2023-12-27 00:02
本帖最后由 aloha20200628 于 2023-12-27 10:44 编辑
如果文件命名中除中文字符+英文+数字以外仅采用某些有限的键盘可见字符,如》.-_@#$[]{}',;=`~+() 这些可选字符排除了批处理脚本运行期容易‘作祟’的那些转义字符。
满足上述命名条件,就可用findstr准确识别文件名中有无中文字符,示例代码如下:- echo,abc.中文_123|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul&&echo,有汉字||echo,无汉字
- echo,zxc-123.xyz|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul&&echo,有汉字||echo,无汉字
- echo,中文|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul&&echo,有汉字||echo,无汉字
复制代码
假设1楼的 *.pdf 文件命名满足上述条件,则可试用如下代码- @echo off
- (for /f "delims=" %%F in ('dir /b/s/a-d *.pdf') do (
- echo,%%~nF|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul || echo,%%F
- ))>new.txt
- exit/b
复制代码
假设10楼的 *.pdf 文件命名也满足上述条件,则可试用如下代码- @echo off
- set newD="d:\中文名PDF目录"
- md %newD% 2>nul
- for /f "delims=" %%F in ('dir /b/s/a-d *.pdf') do (
- echo,%%~nF|findstr /irc:"[^0-9a-z _@#$\.\-\[\]{}()',;=`~+]">nul && copy /y "%%~F" %newD%
- )
- exit/b
复制代码
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |