标题: [文本处理] 求BAT代码批量检查当前目录以及子目录下全部文件的文件名字符数 [打印本页]
作者: ChenCheChe 时间: 2024-2-2 22:28 标题: 求BAT代码批量检查当前目录以及子目录下全部文件的文件名字符数
求助大佬
目录下有很多文件,有的字符超过了140个字符,复制到nas会报错。
我想要用bat查找所有字符数量超过140的文件,用txt把路径和文件名保存下来,最好字符数量是能手动输入再搜索的
字符数量按照汉字算3个字符,符号算3个字符,英文和数字算一个字符。
求个代码,不胜感激!!
作者: 77七 时间: 2024-2-2 23:19
中、英文符号全部算3个?
作者: newswan 时间: 2024-2-2 23:55
powershell
识别的字符包括:数字 字母 : \ . -
计算长度也包括了 : \ .- $folder = "d:\folder"
- $max =140
- Get-ChildItem $folder -Recurse | ForEach-Object {
- $str1 = $_.FullName -replace "[0-9a-zA-Z:\\\-.]",""
- $len = $str1.Length *2 + $_.FullName.Length
- if ( $len -gt $max ) {
- "{0:d3} {1}" -f $len , $_.FullName
- }
- }
复制代码
作者: newswan 时间: 2024-2-2 23:57
要保存 最后一行后 加复制代码
作者: Five66 时间: 2024-2-3 01:07
计算按完整路径来算
英文符号算1个
列表文件名___list.txt编码ansi(gbk)- #/&cls&pause&powershell -c "type -literalpath '%~f0'|out-string|iex"&pause&exit
-
- $themax=140
-
- cmd /c cd.>___list.txt
- (gci -r) |?{
- $l=0
- $_.fullname.tochararray().foreach({
- if([int]$_ -gt 127){$l+=3}else{$l+=1}
- })
- if($l -gt $themax){1}else{0}
- } |%{$_.fullname
- } |sc ___list.txt
复制代码
作者: Batcher 时间: 2024-2-3 19:35
回复 1# ChenCheChe
140个字符只计算文件名本身吗?还是路径也算进去?
作者: ChenCheChe 时间: 2024-2-4 00:17
回复 6# Batcher
你好,只计算文件名字符
作者: Batcher 时间: 2024-2-4 09:06
回复 1# ChenCheChe
能否介绍一下为什么汉字算3个字符?通常是英文、数字、半角符号占用1个字节,汉字和全角符号占用2个字节。
作者: buyiyang 时间: 2024-2-4 10:14
回复 8# Batcher
Linux系统文件路径一般是utf-8编码,汉字一般是三个字节。
作者: aloha20200628 时间: 2024-2-4 11:27
本帖最后由 aloha20200628 于 2024-2-4 11:31 编辑
回复 1# ChenCheChe
既然目标是文件名字符总量,再区分其中不同字段有何意义呢?类同如下各式的计算逻辑...
1+3=4
2+2=4
1+1+2=4
1+1+1+1=4
给一个检查文件名字符总量的批处理版本如下,命令行参数指定文件名字符总量检查值,默认=140- @echo off
- if "%~1"=="" (set "n=140") else set "n=%~1"
- (for /f "delims=" %%F in ('dir/s/b/a-d') do (set/p="%%~nF"<nul>0.0 &for /f %%v in ("0.0") do if %%~zv gtr %n% echo,%%F))>结果.lst
- del 0.0 & exit/b
复制代码
作者: ppll2030 时间: 2024-2-5 22:10
根据要求,
1、汉字三字符,符号(包含中英)三字符,字母和数字一字符。
2、不含完整路径,只统计文件名(含后缀名)
3、字符长度可自由设置。- @echo off
- set /p n=请输入字符长度,回车默认140:
- if not defined n set n=140
- for /f "delims=" %%F in ('dir/b/s/a-d') do (
- if not exist "temp.vbs" call :vbs
- for /f %%a in ('cscript //nologo temp.vbs "%%~nxF"') do if %%a gtr %n% echo,%%F------字符长度:%%a >>超长名单.txt
- )
- del temp.vbs & exit
-
- :vbs
- (echo Dim regex, str, result
- echo Set regex = New RegExp
- echo regex.Pattern = "[A-Za-z0-9]"
- echo regex.Global = True
- echo str = WScript.Arguments.Item(0^)
- echo OGC=Len(str^)
- echo result = regex.Replace(str, ""^)
- echo NAC=Len(result^)
- echo wscript.echo OGC+NAC*2
- )> temp.vbs
- goto:eof
复制代码
作者: ChenCheChe 时间: 2024-2-6 19:06
感谢各位大神帮助!
作者: czjt1234 时间: 2024-2-7 10:17
回复 12# ChenCheChe
说下哪位的代码符合要求呢
还有没看懂你到底是要统计字符数还是字节数
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |