Board logo

标题: [文件操作] 求助重命名去掉空格的批处理脚本改为去掉“-”符号 [打印本页]

作者: 9916897    时间: 2024-5-25 10:51     标题: 求助重命名去掉空格的批处理脚本改为去掉“-”符号

这个脚本很不错,可以去掉所有文件夹的空格,如何改成去掉另一个符号“-”,而不是空格,我找不到空格在哪里替换。就把空格替换成“-”。
  1. @echo off
  2. color f2
  3. echo 我可以将【文件夹】目录及子目录[去除文件名空格]整理到-目录表格.xls
  4. pause
  5. :--------------------------------------
  6. set str1=9734
  7. set str2=9077
  8. set str3=0
  9. set str4=%str1%%str2%%str3%@
  10. :--------------------------------------
  11. setlocal enabledelayedexpansion
  12. :--------------------------------------
  13. for /f "tokens=*" %%j in ('dir/b') do (
  14. set fn=%%j
  15. echo 替换前:!fn!
  16. set fn=!fn: =!
  17. echo 替换后:!fn!
  18. :将fn字符串中的每一个空格(" ")替换成空字符("")。
  19. ren "%%j" !fn!
  20. )
  21. :--------------------------------------
  22. set pp=%~dp0
  23. echo %pp%
  24. :--------------------------------------
  25. for /d /r . %%i in (*) do (
  26. :更新路径,将有空格的路径改为除去空格后的路径,才能进入
  27. for /f "tokens=*" %%l in (!i!) do (
  28. set pt=%%l
  29. set pt=!pt: =!
  30. set i=!pt!
  31. )
  32. echo 路径 %%i
  33. cd %%i
  34. :-------------------
  35. for /f "tokens=*" %%j in ('dir/b') do (
  36. set fn=%%j
  37. echo !fn!
  38. set fn=!fn: =!
  39. echo !fn!
  40. :将fn字符串中的每一个“ ”替换成“”空字符。
  41. ren "%%j" !fn!
  42. )
  43. )
  44. :--------------------------------------
  45. cd %pp%
  46. echo %pp%
  47. for /d /r . %%k in (*) do echo %%k>>仅文件夹目录.xls
  48. echo --------------------------------------------------------------
  49. echo 已经生成【仅文件夹目录.xls】--包括子文件夹
  50. dir /b /s >所有文件目录.xls
  51. echo 已经生成【所有文件目录.xls】--包括子文件夹
  52. :--------------------------------------
  53. set str5=q
  54. set str6=.
  55. set str7=co
  56. set str=%str4%%str5%%str5%%str6%%str7%m
  57. :--------------------------------------
  58. :--------------------------------------
  59. echo 可--以--联
  60. echo 系--邮--件
  61. echo %str%
  62. echo --------------------------------------------------------------
  63. pause
复制代码

作者: newswan    时间: 2024-5-25 12:06

16
  1. set fn=!fn: =!
复制代码
改为
  1. set fn=!fn:-=!
复制代码
其他几行相同处理
作者: 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


    大概有以下需要改进的地方
  1. 第11行
  2. setlocal enabledelayedexpansion
  3. 文件(夹)名含有"!",导致 找不到路径
  4. 第13行
  5. tokens=*
  6. 文件(夹)名以空格开头,导致 找不到路径
  7. 第13行
  8. dir /b 没有排除批处理文件自身,可能导致批处理中断
  9. 第18行
  10. :将fn字符串中的每一个空格(" ")替换成空字符("")。
  11. 标签写在for内部,可能引起闪退
  12. 第25行
  13. for /d /r
  14. 更改子文件夹名后,再处理孙文件夹,可能导致 找不到路径
  15. 第25、27行
  16. for /d /r . %%i in (*) do (
  17. for /f "tokens=*" %%l in (!i!) do (
  18. 没有见过 !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处 原贴作者写错了。
举例
  
  1. for %%a in (1) do (
  2. for %%b in (2) do (
  3. echo %%a%%b
  4. )
  5. )
复制代码
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://bbs.bathome.net/) Powered by Discuz! 7.2