Board logo

标题: [求助]新人请教——“批量修改后缀名.bat”的完善 [打印本页]

作者: lujice     时间: 2011-1-21 14:42    标题: [求助]新人请教——“批量修改后缀名.bat”的完善

代码如下:

@echo off
:0
cls
echo.
echo.                    ╭────────╮
echo.          ╭────┤  使 用  说 明  ├────╮
echo.          │        ╰────────╯        │
echo.          │                                    │
echo.          │   1、本工具的用途是——把指定目录  │
echo.          │      里,某类指定后缀名的文件,批  │
echo.          │      量的修改为其它指定的后缀名。  │
echo.          │                                    │
echo.          │   2、每一步输入完毕,都请敲回车!  │
echo.          │                                    │
echo.          │   3、注意——只输入后缀名,不要    │
echo.          │      输入后缀名前的“.”           │
echo.          │                                    │
echo.          │   4、文件夹的路径中如有空格和特殊  │
echo.          │      字符,请手打输入,不要拖放!  │
echo.          │                                    │
echo.          ╰──────────────────╯
echo.&echo           请输入文件夹的路径,或拖放文件夹到本窗口
set LJ=
set /p LJ=
if /i "%LJ%"=="" goto 0
echo.&echo         请输入修改前的后缀名:
set q=
set /p q=
if /i "%q%"=="" goto 0
echo.&echo          请输入修改后的后缀名:
set h=
set /p h=
if /i "%h%"=="" goto 0
cd %LJ%
REN *.%q% *.%h%
echo.&echo.           后缀名已批量修改成功!
echo.&echo.           请打开文件夹看看吧!
start %LJ%
pause
goto 0

    这个批处理是我的原创,基本是成功的。

    问题是——
    1、当文件夹的路径中有空格和特殊字符时,怎么支持拖放?
    2、如想同时处理文件夹下所有的子目录时,又该怎么写?
    3、为了避免被搜索发现,我还想更进一步:“在批量修改后缀名的同时,批量修改文件名”。
         即——在文件名的第一个字符和第二个字符中间,加个数字1。
         这又该怎么写?
    4、比如,我把“C:\WINDOWS\system32”下,所有的“*.cpl”文件,都改为“后缀名全部统一改为bbb,文件名的第一个字符和第二个字符的中间,则加个数字1”。
         这种情况,用批处理恢复原来的文件名和后缀,又该怎么写?

      盼高手解答!!

      预先感谢了!!!

      顿首......
作者: lujice     时间: 2011-1-21 14:46
这个批处理如果用来"禁止使用控制面板",那效果比网上流传的代码,不知好多少......

呵呵呵......
作者: Hanyeguxing     时间: 2011-1-21 16:35
改cpl扩展名和禁止使用控制面板是两回事
该不能处理的敏感字符依旧不能处理:支持拖放、支持双击、支持过滤、支持拖放时文件与目录混合
@echo off
rem 设置源扩展名
set x0=.bat
rem 设置目标扩展名
set x1=.cmd
rem 设置插入字符
set c=1
echo 开始
if "%~1"=="" (
        set m=1
        goto:b
)
:a
set "a=%~a1"
if "%a:~0,1%"=="-" set d==
if defined d (
if /i "%~x1"=="%x0%" (
        set "a=%~n1%x1%"
        setlocal enabledelayedexpansion
        ren "%~1" "!a:~0,1!%c%!a:~1!"
        endlocal
) else echo 未处理;"%~1"
)
:b
if not defined m set n="%~1\"
if not defined d for /r %n% %%a in (*) do if /i "%%~xa"=="%x0%" (
        set "a=%%~na%x1%"
        setlocal enabledelayedexpansion
        ren "%%a" "!a:~0,1!%c%!a:~1!"
        endlocal
) else echo 未处理;"%%a"
if defined m goto:end
shift
set d=
if not "%~1"=="" goto:a
:end
echo;完成
pause
[ Last edited by Hanyeguxing on 2011-1-21 at 17:00 ]
作者: lujice     时间: 2011-1-21 16:43


  Quote:
Originally posted by Hanyeguxing at 2011-1-21 16:35:
改cpl扩展名和禁止使用控制面板是两回事
该不能处理的敏感字符依旧不能处理:[code]@echo off
rem 设置源扩展名
set x0=.bat
rem 设置目标扩展名
set x1=.c ...

1、首先,谢谢!!

2、我试验过,把“C:\WINDOWS\system32”下,所有的“*.cpl”文件,后缀名都改为bbb后,任何控制面板项目,都不能使用!

3、网上流传的,通过修改注册表来禁止控制面板的方法,有的机子无效。比如我本人的机子。

4、最难的是——如何用批处理改回来,您有好的代码吗?

5、还有,您的代码不能打包为exe后,交给菜鸟使用。而我的代码可以

[ Last edited by lujice on 2011-1-21 at 16:45 ]
作者: Hanyeguxing     时间: 2011-1-21 16:54
1,没事把bat打包成exe干什么?
2,给你写的示例,难道你还要照抄?

[ Last edited by Hanyeguxing on 2011-1-21 at 17:04 ]
作者: xyz1234111     时间: 2011-1-21 20:13
学习了
说个题外话啊!
寒夜兄,你的这个当爱和恨捆绑的这个图片的效果能用批处理做出来么?
如果能,能不能给个代码看看
作者: lujice     时间: 2011-1-22 15:51
奇怪!
建立回收站怎么又支持空格、和特殊字符?


@echo off
:0
cls
echo.
echo.               ╭────────╮
echo.     ╭────┤  使 用 说 明   ├────╮
echo.     │        ╰────────╯        │
echo.     │                                    │
echo.     │   1、本工具的用途是——在指定目录  │
echo.     │      里,建立回收站。              │
echo.     │                                    │
echo.     │   2、每一步输入完毕,都请敲回车!  │
echo.     │                                    │
echo.     │   3、支持文件夹的名字和路径中含有  │
echo.     │      空格和特殊字符!              │
echo.     │                                    │
echo.     │   3、手打输入文件夹的名字和路径、  │
echo.     │      和回收站的名字时,请在前后    │
echo.     │      加上英文的双引号—— "        │
echo.     │                                    │
echo.     ╰──────────────────╯
echo.&echo      请输入文件夹的路径,或拖放文件夹到本窗口
set mulu=
set /p mulu=
echo.&echo         请输入回收站的名字:
set /p minzi=
md %mulu%\%minzi%>nul 2>nul
attrib +s +h %mulu%\%minzi%>nul 2>nul
(echo [.ShellClassInfo]
echo CLSID={645FF040-5081-101B-9F08-00AA002F954E})>%mulu%\%minzi%\desktop.ini
attrib +s +h %mulu%\%minzi%\desktop.ini
echo.&echo.         回收站已建立成功!
echo.&echo.         手工打开看看吧!
echo.
pause
goto 0