找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 24102|回复: 8

[文件操作] [已解决]BAT脚本如何批量替换文件名中的小数点和空格,不修改后缀。

[复制链接]
发表于 2022-3-14 20:20:41 | 显示全部楼层 |阅读模式
本帖最后由 gavincar 于 2022-3-15 19:20 编辑

请问如何通过批处理批量替换掉(即删除)文件名中的.和空格(可能是半角或全角),不修改后缀。
发表于 2022-3-14 21:12:05 | 显示全部楼层
回复 1# gavincar
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. cd /d "%~dp0"
  4. for /f "delims=" %%i in ('dir /b /a-d *.txt') do (
  5.     echo 正在处理文件:%%i
  6.     set "NewName=%%~ni"
  7.     set "NewName=!NewName:.=!"
  8.     set "NewName=!NewName: =!"
  9.     REM 还需要删除哪个字符就照着上面的格式添加即可
  10.     ren "%%i" "!NewName!%%~xi"
  11. )
复制代码

评分

参与人数 1技术 +1 收起 理由
gavincar + 1 非常感谢!!!

查看全部评分

 楼主| 发表于 2022-3-14 23:00:58 | 显示全部楼层
本帖最后由 gavincar 于 2022-3-14 23:04 编辑

回复 2# Batcher


   谢谢,非常感谢,我试运行了一下,发现文件名中的空格和点没被替换掉
我的操作如下:
将您的代码复制粘贴到新建记事本,保存后,直接修改为bat文件。
将需要改文件名的文件和bat文件放一起,运行bat后,文件名中的空格和小数点未被替换。
发表于 2022-3-14 23:46:01 | 显示全部楼层
回复 3# gavincar
.
存成ANSI编码格式的bat文件,放到txt所在文件夹执行
  1. #@&cls&powershell "gc '%~0'|out-string|iex"&pause&exit
  2. gci *.txt |
  3. ForEach {
  4.         $name = $_.BaseName -replace '\s+' -replace '\.'
  5.         $ext = $_.Extension
  6.         ren $_.FullName "$name$ext" #-WhatIf
  7. }
复制代码

评分

参与人数 1技术 +1 收起 理由
gavincar + 1 非常感谢!

查看全部评分

发表于 2022-3-15 08:28:19 | 显示全部楼层
回复 3# gavincar


请参考Q-04把bat文件保存为ANSI编码:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ

如果仍有问题,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/6lbb97qUOs1sTyKJfN0ZEQ
 楼主| 发表于 2022-3-15 08:58:18 | 显示全部楼层
回复 5# Batcher
找到原因了,代码中
for /f "delims=" %%i in ('dir /b /a-d *.txt') do (

这里应该是针对文件夹中的txt文件的,而我之前的文件是jpg和pdf文件,通过按您刚才的方法测试,发现找不到文件,细读代码才发现。
如果针对文件夹下所有类型文件,是不是将*.txt直接改成*.*就可以了?
发表于 2022-3-15 09:55:46 | 显示全部楼层
回复 6# gavincar


    改成*.*之后请注意把这个bat脚本自身排除掉,别把脚本自己给处理了
 楼主| 发表于 2022-3-15 13:21:21 | 显示全部楼层
回复 7# Batcher


    正常处理应该不会影响 到bat文件,但如果要考虑排除它,可能还要加几行代码才行。
发表于 2022-3-16 12:27:13 | 显示全部楼层
本帖最后由 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.在循环内通过判断语句来排除

评分

参与人数 1技术 +1 收起 理由
gavincar + 1 感谢!

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 07:17 , Processed in 0.015710 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表