标题: [文件操作] [已解决]批处理不能重命名带感叹号打头的文件名? [打印本页]
作者: xieqingx 时间: 2010-4-6 02:35 标题: [已解决]批处理不能重命名带感叹号打头的文件名?
测试发现,不能重命名带感叹号打头的文件名,怎么解决呢
--------------------------------------------------------------------
接受了namejm指导后,发布小小代码
我为什么不能在原创代码版块贴代码呢?等级不够吗?那我只能发这里了
代码功能:生成右键菜单,不要使用时可以卸载。在须处理的文件夹右键调用批处理,可对右键指定文件夹内的文件批量重命名为30个随机字母加数字,可根据要求修改文件名长度
代码中 if !n! lss 30 其中30为文件名字符长度,可随意按自已要求修改-
- @echo off
- title [右键重命名文件程序]
- mode con: cols=58 lines=12
- color 6f
-
- if not exist %systemroot%\batchRen.bat ( goto install) else ( goto next)
- :install
- echo.&echo 正在添加右键功能....&echo.
- cd.>%systemroot%\batchRen.bat
- >>%systemroot%\batchRen.bat echo @echo off
- >>%systemroot%\batchRen.bat echo title [右键重命名文件程序]
- >>%systemroot%\batchRen.bat echo mode con: cols=65 lines=30
- >>%systemroot%\batchRen.bat echo color 6f
- >>%systemroot%\batchRen.bat echo echo [code by xieqingx 20100405 blog: hi.baidu.com/xieqingx]
- >>%systemroot%\batchRen.bat echo set code=abcdefghijklmnopqrstuvwxyz0123456789
- >>%systemroot%\batchRen.bat echo setlocal enabledelayedexpansion
- >>%systemroot%\batchRen.bat echo cd /d %%1
- >>%systemroot%\batchRen.bat echo for /f "delims=" %%%%i in ('dir /a-d/b') do (
- >>%systemroot%\batchRen.bat echo set /a filenum+=1
- >>%systemroot%\batchRen.bat echo call :int "%%%%~fi" "%%%%~xi" !filenum! )
- >>%systemroot%\batchRen.bat echo echo 操作完成,正在关闭窗口....
- >>%systemroot%\batchRen.bat echo ping -n 5 127.1 ^>nul^&exit
- >>%systemroot%\batchRen.bat echo :int
- >>%systemroot%\batchRen.bat echo set str=^&set n=
- >>%systemroot%\batchRen.bat echo set name=%%~1
- >>%systemroot%\batchRen.bat echo set ext=%%~2
- >>%systemroot%\batchRen.bat echo set fnum=%%~3
- >>%systemroot%\batchRen.bat echo :begin
- >>%systemroot%\batchRen.bat echo set /a a=%%random%%%%%%35
- >>%systemroot%\batchRen.bat echo set var=!code:~%%a%%,1!^&set str=!str!!var!
- >>%systemroot%\batchRen.bat echo set /a n+=1
- >>%systemroot%\batchRen.bat echo if !n! lss 30 ( goto begin) else ( set /a num+=1 )
- >>%systemroot%\batchRen.bat echo if !num! == !fnum! (
- >>%systemroot%\batchRen.bat echo echo 正在重命名"!name!"文件
- >>%systemroot%\batchRen.bat echo ren "!name!" "!str!!ext!"
- >>%systemroot%\batchRen.bat echo echo 已更名为"!str!!ext!"
- >>%systemroot%\batchRen.bat echo echo.-----------------------------------------------
- >>%systemroot%\batchRen.bat echo ) else (
- >>%systemroot%\batchRen.bat echo set num=
- >>%systemroot%\batchRen.bat echo )
- >>%systemroot%\batchRen.bat echo set str=^&set n=
- reg add "HKCR\Directory\shell\batchRen" /ve /d "指定目录中所有子文件批量改名(&R)" /f >nul
- reg add "HKCR\Directory\shell\batchRen\command" /ve /d "%systemroot%\batchRen.bat %%1" /f >nul
- reg add "HKCR\Directory\shell\batchRen\command" /d 1 /v "check" /f >nul
- echo 添加完毕,现在你可以使用右键菜单,请用右键操作文件夹,&echo.
- echo 选择 "指定目录中所有子文件批量改名(&R)" 的菜单项&echo.
- echo 可以对你右键指定目录中的子文件来进行重命名操作了&echo.
- echo 卸载成功,正在关闭窗口....
- ping -n 8 127.1 >nul&exit
- :next
- echo.
- echo 你要卸载此右键菜单功能吗?
- echo.
- echo Y、是的,我不想要了
- echo.
- echo N、不,我要退出程序
- echo.
- set choice=
- set /p choice= 请输入指定功能代码(Y/N):
- echo.
- if not defined choice cls&goto next
- set "choice=%choice:~0,1%"
- if /i "%choice%"=="N" ( exit ) else (if /i "%choice%"=="Y" ( goto unload) else ( cls&&echo.&echo.&echo.&echo.&echo.&echo
- 请输入正确选项&ping -n 4 127.1>nul&cls&&goto :next))
- :unload
- del %systemroot%\batchRen.bat
- reg delete "HKCR\Directory\shell\batchRen" /f >nul
- echo 卸载成功,正在关闭窗口....
- ping -n 4 127.1 >nul&exit
复制代码
[ 本帖最后由 xieqingx 于 2010-4-10 00:13 编辑 ]
作者: Batcher 时间: 2010-4-6 09:33
为何无法在某些版块发帖?
http://bbs.bathome.net/thread-2128-1-1.html
参考:各用户组拥有的权限一览
http://bbs.bathome.net/thread-1869-1-1.html
作者: terse 时间: 2010-4-6 11:21
为什么不用 For /l .... 而要 goto?
作者: xieqingx 时间: 2010-4-9 20:25 标题: [已解决]请问如何显示带 ! 号的文件
请问如何显示带 ! 号的文件,它会忽略感吧号,所以要重命名操作时会失败-
- @echo off
- for %%i in (*) do echo %%i
- pause
复制代码
[ 本帖最后由 xieqingx 于 2010-4-10 00:11 编辑 ]
作者: hanyeguxing 时间: 2010-4-9 20:42
- @echo off
- for %%a in (*.txt) do (set "a=%%a"
- setlocal enabledelayedexpansion
- echo.!a!
- endlocal)
- pause
复制代码
作者: xieqingx 时间: 2010-4-9 21:44
2楼的没错,我要问的其实是这个问题
以下代码功能是:重命名指定当前文件夹中所有子文件名的这个代码,遇到带!号的子文件名,会出错代码无法执行,就是因为这个引起的,不知道如何解决- @echo off
- color 6f
- echo [code by xieqingx 20100405 blog: hi.baidu.com/xieqingx]
- set code=abcdefghijklmnopqrstuvwxyz0123456789
- setlocal enabledelayedexpansion
- set /p cdr= 请输入当前目录中要重命名所有子文件的文件夹
- cd /d %cdr%
- for /f "delims=" %%i in ('dir /a-d/b') do (
- set /a filenum+=1
- call :int "%%~fi" "%%~xi" !filenum! )
- echo 操作完成,正在关闭窗口....
- pause >nul&exit
- :int
- set str=&set n=
- set name=%~1
- set ext=%~2
- set fnum=%~3
- :begin
- set /a a=%random%%%35
- set var=!code:~%a%,1!&set str=!str!!var!
- set /a n+=1
- if !n! lss 30 ( goto begin) else ( set /a num+=1 )
- if !num! == !fnum! (
- echo 正在重命名"!name!"文件
- ren "!name!" "!str!!ext!"
- echo 已更名为"!str!!ext!"
- echo.-----------------------------------------------
- ) else (
- set num=
- )
- set str=&set n=
复制代码
作者: xieqingx 时间: 2010-4-9 21:50
右键重命名代码
测试发现,不能重命名带感叹号打头的文件名,怎么解决呢
还有可否精简提高效率呢
-
- @echo off
-
- mode con: cols=65 lines=30
- color 6f
- set code=abcdefghijklmnopqrstuvwxyz0123456789
- setlocal enabledelayedexpansion
- cd /d %1
- for /f "delims=" %%i in ('dir /a-d/b') do (
- set /a filenum+=1
- call :int "%%~fi" "%%~xi" !filenum! )
- echo 操作完成,正在关闭窗口....
- ping -n 5 127.1 >nul&exit
- :int
- set str=&set n=
- set name=%~1
- set ext=%~2
- set fnum=%~3
- :begin
- set /a a=%random%%%35
- set var=!code:~%a%,1!&set str=!str!!var!
- set /a n+=1
- if !n! lss 50 ( goto begin) else ( set /a num+=1 )
- if !num! == !fnum! (
- echo 正在重命名"!name!"文件
- ren "!name!" "!str!!ext!"
- echo 已更名为"!str!!ext!"
- echo.-----------------------------------------------
- ) else (
- set num=
- )
- set str=&set n=
复制代码
[ 本帖最后由 xieqingx 于 2010-4-9 22:11 编辑 ]
作者: hanyeguxing 时间: 2010-4-9 22:30
1,在for里加setlocal enabledelayedexpansion,完成前加endlocal
2,我在2楼里已经写了示例.
3,不要重复发贴.
[ 本帖最后由 hanyeguxing 于 2010-4-9 23:22 编辑 ]
作者: xieqingx 时间: 2010-4-9 22:52
我试了N次了,还是不行啊,水平有限,麻烦测试一下吧
作者: 随风 时间: 2010-4-9 22:53
提问首先应学会裁剪你的代码,把成吨的代码搬上来,没几个人有时间和耐心看的
要知道,看别人的代码比自己写代码要累N倍
一般不要用代码来说明你的问题,因为你的代码很有可能会把别人引入歧途,所以尽量用文字描述你的问题或代码意图。
作者: xieqingx 时间: 2010-4-9 22:59
问题是用简化代码测试是没有问题的,
如
- @echo off
- for /f "delims=" %%a in ('dir /b') do (
- set "a=%%a"
- setlocal enabledelayedexpansion
- echo ren !a! %random%
- endlocal)
- pause
复制代码
这段简化码是正确的
但是我的代码,按这个修改CALL :int后就是不行
弄不懂啊,哪位就帮帮我吧,刚学这个不久啊。测试一下吧
[ 本帖最后由 xieqingx 于 2010-4-9 23:04 编辑 ]
作者: hanyeguxing 时间: 2010-4-9 23:15
- @echo off&color 6f&set c=0123456789abcdefghijklmnopqrstuvwxyz
- set/p d= 请输入当前目录中要重命名所有子文件的文件夹
- cd /d %d%
- for /f "delims=" %%a in ('dir /b/a-d') do (set "a=%%a"&set "b=%%~na"
- setlocal enabledelayedexpansion
- echo.正在重命名"!a!"文件
- for /l %%i in (1,1,36) do set/a n=!random!%%36&call set i=!i!%%c:~!n!,1%%
- ren "!a!" "!i!%%~xa"
- echo.已更名为"!i!%%~xa"
- echo.-----------------------------------------------
- endlocal)
- echo 操作完成,等待关闭窗口....&pause >nul&goto :eof
复制代码
按你3楼提供的代码改的
color 6f你这颜色设置得真是没话说...
[ 本帖最后由 hanyeguxing 于 2010-4-9 23:25 编辑 ]
作者: hanyeguxing 时间: 2010-4-9 23:36
发重复了......郁闷......
[ 本帖最后由 hanyeguxing 于 2010-4-9 23:37 编辑 ]
作者: hanyeguxing 时间: 2010-4-9 23:38
不要重复发贴:都害我发错地方了.......................
http://bbs.bathome.net/thread-7553-1-1.html
作者: xieqingx 时间: 2010-4-10 00:11
好,简洁高效。我什么时候才能学到你这水平啊
谢谢
作者: xieqingx 时间: 2010-4-10 00:13
谢谢,你,做我师傅了
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |