[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文件操作] (已解决)怎么把文件/文件夹名称的.号换成空格 ?

本帖最后由 ChenCheChe 于 2020-2-4 21:37 编辑

找了论坛的一个代码,发现有bug。名称替换时会把.号后面的名称给清除了。
麻烦大佬,想要把原名称中的 . 换成空格 应该怎么做?

比如
原名称21.ABC.EFG.HJK批量改名成21 ABC EFG HJK

本帖最后由 smss 于 2020-2-3 23:39 编辑
  1. @echo off&SetLocal EnableDelayedExpansion
  2. set /p strtemp1=要替换的文件名字符串(可替换空格):
  3. set /p strtemp2=替换后的文件名字符串(删除则回车):
  4. for /f "delims=" %%i in ('dir /s /b') do (
  5. set "f=%%~nxi"
  6. set "f1=!f:%strtemp1%=%strtemp2%!"
  7. if not "%%i"==%0 (
  8. if not "!f!"=="!f1!" (
  9. if exist "!f1!" (
  10. echo 由于!f1!存在同名,!f! 文件名未改 ) else ren "!f!" "!f1!"
  11. )
  12. endlocal
  13. )
  14. )
复制代码

TOP

回复 2# smss


    老哥这个运行后输入替换符号回车后快速闪过几行代码,但是文件并没有做出改动???

TOP

  1. @echo off&SetLocal EnableDelayedExpansion
  2. set c=0123456789abcdefghijklmnopqrstuvwxyz
  3. set /p strtemp1=要替换的文件名字符串(可替换空格):
  4. set /p strtemp2=替换后的文件名字符串(删除则回车):
  5. for /f "delims=" %%i in ('dir /s /b') do (
  6.   set "f=%%~nxi"
  7.   set "f1=!f:%strtemp1%=%strtemp2%!"
  8.   if not "%%i"==%0 (
  9.     if not "!f!"=="!f1!" (
  10.        ren "%%i" "!f1!"
  11.     )
  12.   )
  13. )
  14. pause
复制代码
微信:flashercs
QQ:49908356

TOP

回复 1# ChenCheChe


    哪个代码有bug?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

本帖最后由 ChenCheChe 于 2020-2-3 22:59 编辑

回复 4# flashercs


    谢谢,但是老哥你这个会把扩展名前面的.号也给替换掉了,能不能只替换文件名,扩展名的,号不替换呀?

TOP

回复 5# Batcher

http://www.bathome.net/viewthread.php?from=notice&tid=54418
这个帖子的我试了把文件名替换时有时会把被替换字符后面的文件名给清除了,不知道是不是不适合我的改名格式还是bug。
比如把文件名21.ABC中的.号换成空格的话会把.号后面的文件名给清除掉,文件名变成21

TOP

本帖最后由 flashercs 于 2020-2-3 23:24 编辑

回复 6# ChenCheChe
  1. @echo off&SetLocal EnableDelayedExpansion
  2. set c=0123456789abcdefghijklmnopqrstuvwxyz
  3. set /p strtemp1=要替换的文件名字符串(可替换空格):
  4. set /p strtemp2=替换后的文件名字符串(删除则回车):
  5. for /f "delims=" %%i in ('dir /a-d /s /b') do (
  6.   set "f=%%~ni"
  7.   set "f1=!f:%strtemp1%=%strtemp2%!"
  8.   if not "%%i"==%0 (
  9.     if not "!f!"=="!f1!" (
  10.        ren "%%i" "!f1!%%~xi"
  11.     )
  12.   )
  13. )
  14. pause
复制代码
暂时只支持替换文件名,不支持文件夹名.
微信:flashercs
QQ:49908356

TOP

回复 8# flashercs


    谢谢老哥,那我文件夹改名再运行你写的第一个代码就行了,
但是你的第一个代码能不能改成只作用在文件夹上,文件名就不要作替换。
我刚刚自己试了想改,但是怎么也改不成功,如果要把你的第一个代码改成只改动文件夹名,文件名不改动要怎么做?
不好意思,劳烦你这么多次。

TOP

本帖最后由 smss 于 2020-2-4 00:06 编辑
  1. @echo off
  2. set /p str1=要替换的文件名字符串(可替换空格):
  3. set /p str2=替换后的文件名字符串(删除则回车):
  4. for /f "delims=" %%a in ('dir /s /b ^|sort /+65535') do (
  5. if "%%~nxa" neq "%~nx0" (
  6. set "file=%%a"
  7. set "name=%%~na"
  8. set "extension=%%~xa"
  9. call set "name=%%name:%str1%=%str2%%%"
  10. SetLocal EnableDelayedExpansion
  11. ren "!file!" "!name!!extension!" 2>nul
  12. endlocal
  13. )
  14. )
  15. pause
复制代码

TOP

回复 10# smss


    感谢

TOP

回复 9# ChenCheChe

重命名目录比较麻烦是因为一旦目录名改变了,那么该目录下的文件就找不到了,所以得用递归.
现在这脚本可以 替换文件名和目录名了.
以前的脚本就放弃吧.
  1. REM 功能:替换文件名和目录名(包含子目录)的指定字符串
  2. @echo off
  3. set "dir=%~1"
  4. if not defined dir set "dir=%~dp0"
  5. REM 要替换的文件名字符串(可替换空格):
  6. set "strSrc=."
  7. REM 替换后的文件名字符串(删除则留空):
  8. set "strDst= "
  9. call :recurse "%dir%"
  10. pause
  11. exit /b %errorlevel%
  12. :recurse
  13. setlocal
  14. 2>nul,pushd %1||goto end
  15. REM 先处理文件-preorder
  16. for %%A in (*) do (
  17.   if not "%%~fA"==%0 (
  18.     call :renfso "%%A"
  19.   )
  20. )
  21. REM 再处理目录-inorder
  22. for /d %%D in (*) do (
  23.   call :recurse "%%D"
  24.   call :renfso "%%D"
  25. )
  26. popd
  27. :end
  28. endlocal
  29. exit /b
  30. :renfso
  31. set "baseName=%~n1"
  32. call set "newBaseName=%%baseName:%strSrc%=%strDst%%%"
  33. if not "%newBaseName%"=="%baseName%" ren %1 "%newBaseName%%~x1"
  34. exit /b
复制代码
微信:flashercs
QQ:49908356

TOP

回复 12# flashercs


    谢谢老哥,但是这个我测试了下。只是改动了文件名,文件夹名没有变化呀?
  我测试结果文件名的 .号替换成空格了,但是文件夹的.号还在,没有变化

TOP

回复 13# ChenCheChe


    文件夹最后一个.也是算扩展名的
微信:flashercs
QQ:49908356

TOP

回复 14# flashercs


    这样的呀,谢谢老哥。

TOP

返回列表