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

[文件操作] [已解决]批量修改后缀名的批处理怎样完善?

代码如下:
  1. @echo off
  2. :0
  3. cls
  4. echo.
  5. echo.                               ╭────────╮
  6. echo.          ╭───────┤ 使 用  说 明 ├───────╮
  7. echo.          │                   ╰────────╯                 │
  8. echo.          │                                                               │
  9. echo.          │   1、本工具的用途是——把指定目录      │
  10. echo.          │      里,某类指定后缀名的文件,批        │
  11. echo.          │      量的修改为其它指定的后缀名。        │
  12. echo.          │                                                               │
  13. echo.          │   2、每一步输入完毕,都请敲回车!     │
  14. echo.          │                                                               │
  15. echo.          │   3、注意——只输入后缀名,不要         │
  16. echo.          │      输入后缀名前的“.”                         │
  17. echo.          │                                                               │
  18. echo.          │   4、文件夹的路径中如有空格和特殊      │
  19. echo.          │      字符,请手打输入,不要拖放!        │
  20. echo.          │                                                               │
  21. echo.          ╰────────────────────────╯
  22. echo.&echo           请输入文件夹的路径,或拖放文件夹到本窗口
  23. set LJ=
  24. set /p LJ=
  25. if /i "%LJ%"=="" goto 0
  26. echo.&echo         请输入修改前的后缀名:
  27. set q=
  28. set /p q=
  29. if /i "%q%"=="" goto 0
  30. echo.&echo          请输入修改后的后缀名:
  31. set h=
  32. set /p h=
  33. if /i "%h%"=="" goto 0
  34. for /r %LJ% %%i in (*.%q%) do ren %%i *.%h%
  35. echo.&echo.           后缀名已批量修改成功!
  36. echo.&echo.           请打开文件夹看看吧!
  37. start %LJ%
  38. pause
  39. goto 0
复制代码
这个批处理是我的原创,基本是成功的。

注:这句代码是3楼的
  1. for /r %LJ% %%i in (*.%q%) do ren %%i *.%h%
复制代码
注:这句代码是3楼的

    问题是——
    1、当目标文件夹的路径中有空格和特殊字符时,怎么支持拖放?
    2、怎么同时修改目标文件夹下的所有子目录?
    3、为了避免被搜索发现,我还想更进一步:“在批量修改后缀名的同时,批量修改文件名”。
         比如,我把“C:\Documents and Settings\Administrator\桌面”目录下,所有的“*.lnk”文件,都改为“后缀名全部统一改为abc,文件名则整体颠倒”。
         比如"1234.lnk",改名后就变为“4321.abc”。
         比如"1234.jpg.lnk",改名后就变为“gpj.4321.abc”。
         总之,只认最后一个后缀名为真实后缀名。前面的,全部按文件名处理,整体颠倒!
      
      盼高手解答!!

      预先感谢了!!!

      顿首......


      补充说明——
      1、批处理必须要支持:由用户在批处理的运行窗口,自行输入目标文件夹(或拖放获取路径)、原后缀名和新后缀名。
      2、目标文件夹的路径,有可能含有空格。
           比如“C:\Documents and Settings\Administrator”目录。
      3、目标文件夹的路径,有可能含有汉字。
            比如“C:\Documents and Settings\Administrator\桌面”目录。
      4、目标文件夹的路径,有可能含有特殊字符。
           比如"^"和“&”字符。
      5、批处理必须要支持,对系统或隐藏属性文件的改名。但是,改名后,又必须恢复原来的属性。

[ 本帖最后由 lujice 于 2011-1-23 09:56 编辑 ]

这个批处理如果用来"禁止使用控制面板",那效果比网上流传的代码,不知好多少......

呵呵呵......

TOP

1、当文件夹的路径中有空格和特殊字符时,怎么支持拖放?
  cd %LJ% 改为 cd /d "%LJ%"
   2、如想同时处理文件夹下所有的子目录时,又该怎么写?
  REN *.%q% *.%h% 改为 for /r "%LJ%"  %%i in (*.%q%) do ren %%i %%~ni.%h%
    3、为了避免被搜索发现,我还想更进一步:“在批量修改后缀名的同时,批量修改文件名”。
         即——在文件名的第一个字符和第二个字符中间,加个数字1。
         这又该怎么

[ 本帖最后由 Hello123World 于 2011-1-22 20:07 编辑 ]

TOP

谢谢“Hello123World”了!

再请高手继续完善......

TOP

“Hello123World”,您的修改是错误的!!!

应该改为——

echo.&echo          请输入修改后的后缀名:
set h=
set /p h=
if /i "%h%"=="" goto 0
for /r %LJ% %%i in (*.%q%) do ren %%i *.%h%
echo.&echo.           后缀名已批量修改成功!
echo.&echo.           请打开文件夹看看吧!

不过,还是不支持空格和特殊字符!

依然谢谢您!!

再请高手继续完善......

[ 本帖最后由 lujice 于 2011-1-21 13:14 编辑 ]

TOP

改cpl扩展名和禁止使用控制面板是两回事
示例:该不能处理的敏感字符依旧不能处理,支持拖放、支持双击、支持过滤、支持拖放时文件与目录混合
  1. @echo off
  2. set x0=.bat
  3. set x1=.cmd
  4. set c=1
  5. if "%~1"=="" set m==&goto:b
  6. :a
  7. set "a=%~a1"
  8. if "%a:~0,1%"=="-" (set d==) else set d=
  9. if defined d (
  10. if /i "%~x1"=="%x0%" (
  11.         set "a=%~n1%x1%"
  12.         setlocal enabledelayedexpansion
  13.         ren "%~1" "!a:~0,1!%c%!a:~1!"
  14.         endlocal
  15. ) else echo 未处理;"%~1"
  16. )
  17. :b
  18. if not defined m set n="%~1\"
  19. if not defined d for /r %n% %%a in (*) do if /i "%%~xa"=="%x0%" (
  20.         set "a=%%~na%x1%"
  21.         setlocal enabledelayedexpansion
  22.         ren "%%a" "!a:~0,1!%c%!a:~1!"
  23.         endlocal
  24. ) else echo 未处理;"%%a"
  25. if defined m goto:end
  26. shift
  27. if not "%~1"=="" goto:a
  28. :end
  29. echo;完成
  30. pause
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-21 16:03 编辑 ]
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

谢谢“hanyeguxing”版主

一、我现在才发现插入代码的编辑按钮,抱歉了!

二、谢谢版主的代码!!

三、您的批处理对拖放的支持很好,同时处理子目录。不过,您的批处理不支持双击。只要一双击,就马上处理批处理所在目录及其子目录,动作是——
   1、 改后缀名;
   2、文件名插入字符。
   这与我的期望不一样。问题有——
   1、应该支持双击;
   2、应该支持在批处理窗口,自行输入路径、原后缀名、新后缀名、待插入字符;
   3、还差一段删除插入字符的代码(即还原)

TOP

要想指定双击后的路径,把 if "%~1"=="" set m==&goto:b 改成
if "%~1"=="" (
set m==
set/p n=路径
goto:b
)
原后缀名、新后缀名、待插入字符;在最开始的3个set改成set/p
删除的例如:ren "%%a" "!a:~0,1!!a:~2!"
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

原帖由 hanyeguxing 于 2011-1-21 18:06 发表
要想指定双击后的路径,把 if "%~1"=="" set m==&goto:b 改成
if "%~1"=="" (
set m==
set/p n=路径
goto:b
)
原后缀名、新后缀名、待插入字符;在最开始的3个set改成set/p
删除的例如:ren "%%a" "!a:~0,1!! ...

  1. ren "%%a" "!a:~0,1!!a:~2!"
复制代码


学了一招!!谢谢!!

唉!还是回去啃论坛的教程帖子吧!

TOP

版主,您的代码Bug不少啊!

还是我自己慢慢琢磨解决吧!

谢谢你给了我加、删字符的方法!

TOP

很郁闷啊,我很多个文件是这样的(写批量命名失败的结果)
*.doc.docx
想命名到doc但是会变成*.doc.docx.doc怎么解决呀。

TOP

回复 10楼 的帖子

出现了哪些问题?
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

回“寒夜孤星”

比如,用户不想插入字符时,变量"C"不输入字符直接回车......

比如,双后缀名、多后缀名文件......

比如,我用批处理窗口的“标记——粘贴”功能,输入待插入字符为汉字......

[ 本帖最后由 lujice 于 2011-1-22 13:58 编辑 ]

TOP

奇怪!
建立回收站怎么又支持空格、和特殊字符?
  1. @echo off
  2. :0
  3. cls
  4. echo.
  5. echo.               ╭────────╮
  6. echo.     ╭────┤  使 用 说 明   ├────╮
  7. echo.     │        ╰────────╯        │
  8. echo.     │                                    │
  9. echo.     │   1、本工具的用途是——在指定目录  │
  10. echo.     │      里,建立回收站。              │
  11. echo.     │                                    │
  12. echo.     │   2、每一步输入完毕,都请敲回车!  │
  13. echo.     │                                    │
  14. echo.     │   3、支持文件夹的名字和路径中含有  │
  15. echo.     │      空格和特殊字符!              │
  16. echo.     │                                    │
  17. echo.     │   3、手打输入文件夹的名字和路径、  │
  18. echo.     │      和回收站的名字时,请在前后    │
  19. echo.     │      加上英文的双引号——"         │
  20. echo.     │                                    │
  21. echo.     ╰──────────────────╯
  22. echo.&echo      请输入文件夹的路径,或拖放文件夹到本窗口
  23. set mulu=
  24. set /p mulu=
  25. echo.&echo         请输入回收站的名字:
  26. set /p minzi=
  27. md %mulu%\%minzi%>nul 2>nul
  28. attrib +s +h %mulu%\%minzi%>nul 2>nul
  29. (echo [.ShellClassInfo]
  30. echo CLSID={645FF040-5081-101B-9F08-00AA002F954E})>%mulu%\%minzi%\desktop.ini
  31. attrib +s +h %mulu%\%minzi%\desktop.ini
  32. echo.&echo.         回收站已建立成功!
  33. echo.&echo.         手工打开看看吧!
  34. echo.
  35. pause
  36. goto 0
复制代码

[ 本帖最后由 lujice 于 2011-1-22 13:55 编辑 ]

TOP

除了说路过,我已经彻底无语了。。。
寒夜孤星:在没有说明的情况下,本人所有代码均运行在 XP SP3 下 (有问题请发贴,QQ临时会话已关闭)

TOP

返回列表