标题: [文件操作] 【已解决】求批处理命令,将文件夹里的所有文件重命名仅保留字母数字和标点字符,内详 [打印本页]
作者: crownking1983 时间: 2024-5-21 23:34 标题: 【已解决】求批处理命令,将文件夹里的所有文件重命名仅保留字母数字和标点字符,内详
本帖最后由 crownking1983 于 2024-5-22 20:14 编辑
求批处理命令,将文件夹里的所有文件重命名仅保留字符、字母和数字。
实例如下:
一个文件夹里有文件
2024.05.12 美杜莎 [15P 266M].zip
2024.05.14 小舞 [26P 204M].txt
2024.05.19 千仞雪 [20P 534M].rar
批处理命令执行后 这些文件名变成
2024.05.12 [15P 266M].zip
2024.05.14 [26P 204M].txt
2024.05.19 [20P 534M].rar
也就是将所有的汉字去掉 仅保留字母数字和标点字符。谢谢各路大神
作者: aloha20200628 时间: 2024-5-22 10:10
本帖最后由 aloha20200628 于 2024-5-22 10:16 编辑
回复 1# crownking1983
好在文件名中的中文字段有空格界定,代码简化多了...
- @echo off & for /f "delims=" %%F in (' dir /b/a-d "* * [*].*" ') do (
- for /f "tokens=1-2* delims= " %%a in ("%%~nxF") do ren "%%F" "%%a %%c"
- )
- pause&exit/b
复制代码
作者: crownking1983 时间: 2024-5-22 18:51
回复 2# aloha20200628
那大神,请问中文与字母数字之间没有空格的话,会是什么样的呢?能否出一个中文与字母数字之间不带空格的批处理代码,以便以后遇到了使用
作者: crownking1983 时间: 2024-5-22 19:26
本帖最后由 crownking1983 于 2024-5-22 19:27 编辑
回复 2# aloha20200628
貌似格式必须是固定的死的方可
作者: aloha20200628 时间: 2024-5-22 19:45
本帖最后由 aloha20200628 于 2024-5-22 20:01 编辑
回复 3# crownking1983
好吧,再给一个剔除中文字段的版本,无论其前后有无空格...
- @echo off &setlocal enabledelayedexpansion
- for /f "delims=" %%F in (' dir /b/a-d "* * [*].*" ') do (
- (call :_cutHZ "%%~nF" cF)
- ren "%%F" "!cF!%%~xF"
- )
- endlocal&pause&exit/b
- :_cutHZ //REM 剔除文件名中包含的全部中文字符 限定文件名最大长度=260
- set "$s=%~1"&set "_s="
- for /L %%n in (0 1 260) do (
- set "c=!$s:~%%n,1!" &if "!c!"=="" set "%~2=!_s!" &exit/b
- if "!c!" leq "Z" set "_s=!_s!!c!"
- )
- exit/b
复制代码
如果不约束文件名格式,只须剔除其中的中文字段,则可改变以上代码第2行如下
- for /f "delims=" %%F in (' dir /b/a-d "*.*" ') do (
复制代码
作者: Five66 时间: 2024-5-22 19:51
保存为ansi或gbk编码的bat- @echo off&pause
- set "@self=%~nx0"
- chcp 437>nul
- setlocal enabledelayedexpansion
- set aaa=1
- for /f "eol=/ delims=" %%i in ('dir /b') do (
- if "!aaa!" == "%aaa%" endlocal&chcp 936>nul
- set /a ccc+=1
- set @file=%%i
- call set @file%%ccc%%=%%@file%%
- )
- for /f "eol=/ delims=" %%i in ('dir /b') do (
- set /a bbb+=1
- set @file=%%i
- setlocal enabledelayedexpansion
- for %%c in (!bbb!) do (
- if "!@file!" neq "!@self!" (
- echo,rename "!@file!" to "!@file%%c:?=!"
- rename "!@file!" "!@file%%c:?=!"
- )
- )
- endlocal
- )
- pause&exit/b
复制代码
作者: crownking1983 时间: 2024-5-22 20:12
回复 5# aloha20200628
实在是太牛逼了!感谢大佬!
作者: crownking1983 时间: 2024-5-22 20:13
回复 6# Five66
这个也好牛逼啊 感谢大佬!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |