标题: [文件操作] [已解决]批量修改后缀名的批处理怎样完善? [打印本页]
作者: lujice 时间: 2011-1-21 11:47 标题: [已解决]批量修改后缀名的批处理怎样完善?
代码如下:- @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
- for /r %LJ% %%i in (*.%q%) do ren %%i *.%h%
- echo.&echo. 后缀名已批量修改成功!
- echo.&echo. 请打开文件夹看看吧!
- start %LJ%
- pause
- goto 0
复制代码
这个批处理是我的原创,基本是成功的。
注:这句代码是3楼的- 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 编辑 ]
作者: lujice 时间: 2011-1-21 11:49
这个批处理如果用来"禁止使用控制面板",那效果比网上流传的代码,不知好多少......
呵呵呵......
作者: Hello123World 时间: 2011-1-21 12:28
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 编辑 ]
作者: lujice 时间: 2011-1-21 12:46
谢谢“Hello123World”了!
再请高手继续完善......
作者: lujice 时间: 2011-1-21 12:57
“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 编辑 ]
作者: hanyeguxing 时间: 2011-1-21 16:02
改cpl扩展名和禁止使用控制面板是两回事
示例:该不能处理的敏感字符依旧不能处理,支持拖放、支持双击、支持过滤、支持拖放时文件与目录混合- @echo off
- set x0=.bat
- set x1=.cmd
- set c=1
- if "%~1"=="" set m==&goto:b
- :a
- set "a=%~a1"
- if "%a:~0,1%"=="-" (set d==) else 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
- if not "%~1"=="" goto:a
- :end
- echo;完成
- pause
复制代码
[ 本帖最后由 hanyeguxing 于 2011-1-21 16:03 编辑 ]
作者: lujice 时间: 2011-1-21 17:57 标题: 谢谢“hanyeguxing”版主
一、我现在才发现插入代码的编辑按钮,抱歉了!
二、谢谢版主的代码!!
三、您的批处理对拖放的支持很好,同时处理子目录。不过,您的批处理不支持双击。只要一双击,就马上处理批处理所在目录及其子目录,动作是——
1、 改后缀名;
2、文件名插入字符。
这与我的期望不一样。问题有——
1、应该支持双击;
2、应该支持在批处理窗口,自行输入路径、原后缀名、新后缀名、待插入字符;
3、还差一段删除插入字符的代码(即还原)
作者: 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!!a:~2!"
作者: lujice 时间: 2011-1-21 18:18
原帖由 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!! ...
-
- ren "%%a" "!a:~0,1!!a:~2!"
复制代码
学了一招!!谢谢!!
唉!还是回去啃论坛的教程帖子吧!
作者: lujice 时间: 2011-1-21 18:30
版主,您的代码Bug不少啊!
还是我自己慢慢琢磨解决吧!
谢谢你给了我加、删字符的方法!
作者: BillGates 时间: 2011-1-21 19:55
很郁闷啊,我很多个文件是这样的(写批量命名失败的结果)
*.doc.docx
想命名到doc但是会变成*.doc.docx.doc怎么解决呀。
作者: hanyeguxing 时间: 2011-1-21 20:56 标题: 回复 10楼 的帖子
出现了哪些问题?
作者: lujice 时间: 2011-1-22 10:17 标题: 回“寒夜孤星”
比如,用户不想插入字符时,变量"C"不输入字符直接回车......
比如,双后缀名、多后缀名文件......
比如,我用批处理窗口的“标记——粘贴”功能,输入待插入字符为汉字......
[ 本帖最后由 lujice 于 2011-1-22 13:58 编辑 ]
作者: lujice 时间: 2011-1-22 13:25
奇怪!
建立回收站怎么又支持空格、和特殊字符?
-
- @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
复制代码
[ 本帖最后由 lujice 于 2011-1-22 13:55 编辑 ]
作者: hanyeguxing 时间: 2011-1-22 15:59
除了说路过,我已经彻底无语了。。。
作者: lujice 时间: 2011-1-22 18:34
呵呵,我这个菜鸟好笨啊!!看不懂带for的语句,看不懂如何插入、与删除字符......
算了,给我一个成品吧!
挑战——批量修改后缀名、并同时颠倒文件名
批处理的用途是——
1、把目标文件夹(包含它的所有子目录)里,某类指定后缀名的文件,批量的修改为其它指定的后缀名。
2、同时,把目标文件夹(包含它的所有子目录)里,某类指定后缀名的文件,批量的颠倒文件名。
补充说明——
1、批处理必须要支持:由用户在批处理的运行窗口,自行输入目标文件夹(或拖放获取路径)、原后缀名和新后缀名。
2、目标文件夹的路径,有可能含有空格。
比如“C:\Documents and Settings\Administrator”目录。
3、目标文件夹的路径,有可能含有汉字。
比如“C:\Documents and Settings\Administrator\桌面”目录。
4、目标文件夹的路径,有可能含有特殊字符。
比如"^"和“&”字符。
5、具体改名的例子是:
比如"1234.原后缀名",改名后就变为“4321.新后缀名”
6、双后缀名的情况是:
比如"1234.jpg.原后缀名",改名后就变为“gpj.4321.新后缀名”。
总之,只认最后一个后缀名为真实后缀名。前面的,全部按文件名处理,整体颠倒!
7、批处理必须要支持,对系统或隐藏属性文件的改名。但是,改名后,又必须恢复原来的属性。
[ 本帖最后由 lujice 于 2011-1-22 19:16 编辑 ]
作者: tmplinshi 时间: 2011-1-22 21:32
- @echo off
-
- :Input_Folder
- echo 请输入文件夹路径(或拖放文件夹到本窗口):
- set Folder=
- set /p Folder=
-
- if not defined Folder goto Input_Folder
- if not exist "%Folder:"=%" (
- echo * 错误:不存在该文件夹
- goto Input_Folder
- )
-
- :Input_OldExt
- set OldExt=
- set /p OldExt=请输入原后缀名:
-
- if not defined OldExt goto Input_OldExt
-
- :Input_NewExt
- set NewExt=
- set /p NewExt=请输入新后缀名:
-
- if not defined NewExt goto Input_NewExt
-
- rem 去除路径中的引号、后缀中的“.”及前面的字符
- set "Folder=%Folder:"=%"
- set "OldExt=%OldExt:*.=%"
- set "NewExt=%NewExt:*.=%"
-
- for /f "delims=" %%i in ('dir /a:-d /b /s "%Folder%\*.%OldExt%"') do (
- set fPath=%%~dpi
- set fName=%%~ni
- set fAttr=%%~ai
- SetLocal EnableDelayedExpansion
-
- rem 判断有没有“系统”和“隐藏”属性,有则去除
- set AttrList=
- if "!fAttr:s=!" neq "!fAttr!" set AttrList= s
- if "!fAttr:h=!" neq "!fAttr!" set AttrList=!AttrList! h
- if defined AttrList (
- attrib !AttrList: = -! "!fPath!!fName!.!OldExt!"
- )
-
- rem 计算文件名的字符个数
- set /a n = 8189, b = 0
- for /l %%a in (1 1 13) do (
- set /a "a = (n - b) / 2 + b"
- for %%b in (!a!) do (
- if "!fName:~%%b,1!"=="" (set n=!a!) else set b=!a!
- )
- )
-
- rem 颠倒文件名
- set /a n -= 1
- for /l %%n in (0 1 !n!) do (
- set NewName=!fName:~%%n,1!!NewName!
- )
-
- rem 重命名
- ren "!fPath!!fName!.!OldExt!" "!NewName!.!NewExt!"
-
- rem 如果之前修改了文件属性,则改回去
- if defined AttrList (
- attrib !AttrList: = +! "!fPath!!NewName!.!NewExt!"
- )
-
- EndLocal
- )
复制代码
[ 本帖最后由 tmplinshi 于 2011-1-23 10:23 编辑 ]
作者: lujice 时间: 2011-1-23 09:54 标题: 感谢tmplinshi 老大!!
试验了!目前还没有发现Bug!!
这个工具,用于禁止(恢复)计算机某些功能的执行。比如禁止(恢复)“我的电脑——右键——管理”、比如禁止(恢复)“文件夹选项”、比如禁止(恢复)控制面板的所有项目、比如禁止(恢复)组策略、比如禁止(恢复)注册表......
呵呵!这种禁止方法,别人还能轻易破解吗???
万分感谢tmplinshi 老大!!
马上回去,抱起论坛的教程,慢慢咀嚼tmplinshi 老大的代码......
再次感谢tmplinshi 老大!!
作者: lujice 时间: 2011-1-23 10:09
虽然我是一个不折不扣的菜鸟,只会最简单的命令。但是,我敢于尝试......
过两天,我会发一个U盘病毒免疫批处理。有一点原创的DIY,就是加一个把隐私文件藏进去的功能,再加强下防删除、防更名的能力。
高手就不看了,全是用简单命令写的语句。
回去抠脑壳吧!
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |