Board logo

标题: [文件操作] [已解决]批处理能实现检测文件名是否含中文? [打印本页]

作者: liaoguinan    时间: 2023-8-11 20:27     标题: [已解决]批处理能实现检测文件名是否含中文?

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



如图,如何遍历多层文件夹下的PDF文件名是否有中文,如果纯数字的文件名则记录路径,并把文件路径记录到记事本,带有中文的文件则不记录
作者: hlzj88    时间: 2023-8-11 22:40

  1. 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 编辑
  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

第二句是论坛找来的,,能力有限,,路径不能带中文
作者: pd1    时间: 2023-8-12 00:07

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

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

回复 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编码。
作者: aloha20200628    时间: 2023-8-12 12:24


试试这个版本...
  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
复制代码

作者: qixiaobin0715    时间: 2023-8-12 16:30

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

如果确实要记录文件名为纯数字的文件的话,就简单多了:
  1. 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准确识别文件名中有无中文字符,示例代码如下:
  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
复制代码





欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2