标题: [文件操作] [已解决]BAT脚本如何批量替换文件名中的小数点和空格,不修改后缀。 [打印本页]
作者: gavincar 时间: 2022-3-14 20:20 标题: [已解决]BAT脚本如何批量替换文件名中的小数点和空格,不修改后缀。
本帖最后由 gavincar 于 2022-3-15 19:20 编辑
请问如何通过批处理批量替换掉(即删除)文件名中的.和空格(可能是半角或全角),不修改后缀。
作者: Batcher 时间: 2022-3-14 21:12
回复 1# gavincar - @echo off
- setlocal enabledelayedexpansion
- cd /d "%~dp0"
- for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
- echo 正在处理文件:%%i
- set "NewName=%%~ni"
- set "NewName=!NewName:.=!"
- set "NewName=!NewName: =!"
- REM 还需要删除哪个字符就照着上面的格式添加即可
- ren "%%i" "!NewName!%%~xi"
- )
复制代码
作者: gavincar 时间: 2022-3-14 23:00
本帖最后由 gavincar 于 2022-3-14 23:04 编辑
回复 2# Batcher
谢谢,非常感谢,我试运行了一下,发现文件名中的空格和点没被替换掉
我的操作如下:
将您的代码复制粘贴到新建记事本,保存后,直接修改为bat文件。
将需要改文件名的文件和bat文件放一起,运行bat后,文件名中的空格和小数点未被替换。
作者: 5i365 时间: 2022-3-14 23:46
回复 3# gavincar
.
存成ANSI编码格式的bat文件,放到txt所在文件夹执行- #@&cls&powershell "gc '%~0'|out-string|iex"&pause&exit
- gci *.txt |
- ForEach {
- $name = $_.BaseName -replace '\s+' -replace '\.'
- $ext = $_.Extension
- ren $_.FullName "$name$ext" #-WhatIf
- }
复制代码
作者: Batcher 时间: 2022-3-15 08:28
回复 3# gavincar
请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
如果仍有问题,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
作者: gavincar 时间: 2022-3-15 08:58
回复 5# Batcher
找到原因了,代码中
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
这里应该是针对文件夹中的txt文件的,而我之前的文件是jpg和pdf文件,通过按您刚才的方法测试,发现找不到文件,细读代码才发现。
如果针对文件夹下所有类型文件,是不是将*.txt直接改成*.*就可以了?
作者: Batcher 时间: 2022-3-15 09:55
回复 6# gavincar
改成*.*之后请注意把这个bat脚本自身排除掉,别把脚本自己给处理了
作者: gavincar 时间: 2022-3-15 13:21
回复 7# Batcher
正常处理应该不会影响 到bat文件,但如果要考虑排除它,可能还要加几行代码才行。
作者: qixiaobin0715 时间: 2022-3-16 12:27
本帖最后由 qixiaobin0715 于 2022-3-16 16:29 编辑
排除bat文件有以下思路:
1.搜索文件时,穷尽所有要处理的文件扩展名。如:for /f ... in ('dir /b /a-d *.pdf *.doc *.jpg...') do...
2.通过管道命令排除bat文件。for /f ... in ('dir /b /a-d ^|findstr /ve "\.bat"') do...
3.在循环内通过判断语句来排除
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |