标题: [文件操作] 求助重命名去掉空格的批处理脚本改为去掉“-”符号 [打印本页]
作者: 9916897 时间: 2024-5-25 10:51 标题: 求助重命名去掉空格的批处理脚本改为去掉“-”符号
这个脚本很不错,可以去掉所有文件夹的空格,如何改成去掉另一个符号“-”,而不是空格,我找不到空格在哪里替换。就把空格替换成“-”。- @echo off
- color f2
- echo 我可以将【文件夹】目录及子目录[去除文件名空格]整理到-目录表格.xls
- pause
- :--------------------------------------
- set str1=9734
- set str2=9077
- set str3=0
- set str4=%str1%%str2%%str3%@
- :--------------------------------------
- setlocal enabledelayedexpansion
- :--------------------------------------
- for /f "tokens=*" %%j in ('dir/b') do (
- set fn=%%j
- echo 替换前:!fn!
- set fn=!fn: =!
- echo 替换后:!fn!
- :将fn字符串中的每一个空格(" ")替换成空字符("")。
- ren "%%j" !fn!
- )
- :--------------------------------------
- set pp=%~dp0
- echo %pp%
- :--------------------------------------
- for /d /r . %%i in (*) do (
- :更新路径,将有空格的路径改为除去空格后的路径,才能进入
- for /f "tokens=*" %%l in (!i!) do (
- set pt=%%l
- set pt=!pt: =!
- set i=!pt!
- )
- echo 路径 %%i
- cd %%i
- :-------------------
- for /f "tokens=*" %%j in ('dir/b') do (
- set fn=%%j
- echo !fn!
- set fn=!fn: =!
- echo !fn!
- :将fn字符串中的每一个“ ”替换成“”空字符。
- ren "%%j" !fn!
- )
- )
- :--------------------------------------
- cd %pp%
- echo %pp%
- for /d /r . %%k in (*) do echo %%k>>仅文件夹目录.xls
- echo --------------------------------------------------------------
- echo 已经生成【仅文件夹目录.xls】--包括子文件夹
- dir /b /s >所有文件目录.xls
- echo 已经生成【所有文件目录.xls】--包括子文件夹
- :--------------------------------------
- set str5=q
- set str6=.
- set str7=co
- set str=%str4%%str5%%str5%%str6%%str7%m
- :--------------------------------------
- :--------------------------------------
- echo 可--以--联
- echo 系--邮--件
- echo %str%
- echo --------------------------------------------------------------
- pause
复制代码
作者: newswan 时间: 2024-5-25 12:06
16复制代码
改为复制代码
其他几行相同处理
作者: 77七 时间: 2024-5-26 01:10
楼主提供的代码有多处需要改进。请先在论坛内搜索,试试能不能找到答案。
作者: 9916897 时间: 2024-5-26 09:35
楼主提供的代码有多处需要改进。请先在论坛内搜索,试试能不能找到答案。
77七 发表于 2024-5-26 01:10
这段代码 是在百度里找的,我用过了觉得还可以,还差改一个-符号,所以就想上论坛来问问。这段代码没有错误吧,我使用过好像可以改,包括文件夹里的文件夹和文件都可以改名。如果没错误的话先凑合着用了。上班有点忙也没有时间研究这段代码。帮忙看下除了改名,还有别的错误不。
作者: 9916897 时间: 2024-5-26 09:39
16改为其他几行相同处理
newswan 发表于 2024-5-25 12:06
xie谢谢!
作者: 77七 时间: 2024-5-26 12:21
回复 4# 9916897
大概有以下需要改进的地方
- 第11行
- setlocal enabledelayedexpansion
- 文件(夹)名含有"!",导致 找不到路径
-
- 第13行
- tokens=*
- 文件(夹)名以空格开头,导致 找不到路径
-
- 第13行
- dir /b 没有排除批处理文件自身,可能导致批处理中断
-
- 第18行
- :将fn字符串中的每一个空格(" ")替换成空字符("")。
- 标签写在for内部,可能引起闪退
-
- 第25行
- for /d /r
- 更改子文件夹名后,再处理孙文件夹,可能导致 找不到路径
-
- 第25、27行
- for /d /r . %%i in (*) do (
- for /f "tokens=*" %%l in (!i!) do (
- 没有见过 !i! 这种用法,内层for 应该无效
复制代码
作者: 9916897 时间: 2024-5-26 23:51
回复 6# 77七
测试的时候 真的是有闪退过,批处理文件自身也被改名了,"!"和空格的文件夹目前还没有碰到有,内层for是什么意思,对批处理文件完全是小白,还请指教一二。我特意去百度了一下,!i! 是原文档就有,符号里面的字母确实是i。链接在这:https://jingyan.baidu.com/article/cb5d6105af705b005c2fe035.html
作者: 77七 时间: 2024-5-27 01:21
回复 7# 9916897
6楼中第1-2处的问题,很多时候不会遇到。第3-5处应该避免。第6处 原贴作者写错了。
举例
- for %%a in (1) do (
- for %%b in (2) do (
- echo %%a%%b
- )
- )
复制代码
for %%b in (2) do (...) 是内层for
作者: qixiaobin0715 时间: 2024-5-27 08:37
回复 6# 77七
在Windows下不存在这种情况吧,“文件(夹)名以空格开头”。
作者: 77七 时间: 2024-5-27 11:21
回复 9# qixiaobin0715
大佬,我试过了,在命令行下可以操作。
作者: 9916897 时间: 2024-5-27 14:06
回复 10# 77七
请教一下,怎么改才能把脚本改成,只修改所有文件夹名称,文件名称不用改。每次运行要等好久。我的应用只要改文件夹名称即可。
作者: 77七 时间: 2024-5-27 14:22
回复 11# 9916897
此类问题,在论坛内被提到多次。参考 批处理如何替换文件夹名和文件名里的指定字符或字符串 6楼
把 代码中的 dir /s /b 改成 dir /s /b /ad
作者: 9916897 时间: 2024-5-27 18:13
回复 12# 77七
不好意思啊,因为要上班,没有时间在论坛里详细研究。谢谢你的解答,感谢!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |