Board logo

标题: [文件管理] 批量改名精灵RenamedElves [打印本页]

作者: cjiabing    时间: 2012-4-26 23:26     标题: 批量改名精灵RenamedElves

本帖最后由 cjiabing 于 2012-4-26 23:47 编辑

·实在无聊就做了这个无聊的东西!~

      有一些不是很重要也不是不重要的东西,它就在那里,不声不吭的,怕被人误点击了、误观看了、误传播了就风凉了!~所以,织件遮羞服,遮蔽遮蔽我们那冰冷的下半身!~

·批量改名和批量恢复,
       能够把目录下所有文件名都改成一堆随机数,搞得你都不懂哪个是你要找的文件了,简单的掩人耳目。当然,这是可以恢复的。
       不一定改成随机数,也可以改成其他字符,但觉得这个批量改名嘛都是比较实际的问题,不能一概而论。
       不用变量延迟又做不了工,用了又出现个漏洞,这个叹号看看怎么个处理。
       只是改一下文件名,不对文件本身数据操作,都比较简单。
·演示功能和演示文件
       演示是用来演示批量改名和恢复的,演示文件是用来做试验的。
·破坏并删除文件,
       以前发过,只是不够简单,下面的还没有修改好,最好不用。
·快捷方式,
       做出来了,但没改好,要调整下。
·文件夹封口胶
       原意是想将一些文件放到一个文件夹中,然后通过一些简单的方法来防删、防改、放找到。但试验不是很成功。


  1. @echo off&setlocal enabledelayedexpansion&title RenamedElves V1.0&set "BRT=%~0"&set "BRTP=%~dp0"&cd /d "%~dp0"&if /i "%~1"=="R" goto 开始演示
  2. :开始 请勿擅改代码,否则后果自负。
  3. cls&echo;&echo;&echo;
  4. echo;                                           批量改名精灵 RenamedElves V1.0
  5. echo;   ==========================================================================
  6. echo;        本工具可批量修改当前目录及目录下所有文件的文件名为指定文件名。
  7. echo;        不支持特殊符号(如叹号),请自行修改。附带其他功能,谨慎使用。
  8. echo;        本工具不能完全保证数据安全,请注意备份,按章操作,自负后果。
  9. echo;   ==========================================================================
  10. echo;
  11. echo;                  1、批量改名 - 批量将当前文件名改为随机数。     
  12. echo;                  2、批量恢复 - 批量恢复原来的文件名。
  13. echo;                  3、功能演示 - 演示批量改名和恢复的过程。
  14. echo;                  4、试验文件 - 生成用于演示的文件。
  15. echo;                  5、破坏删除 - 破坏并删除目录下所有文件,慎用!
  16. echo;                  6、文件属性 - 修改文件隐藏、只读等属性。
  17. echo;                  7、快捷方式 - 自动创建快捷方式。
  18. echo;                  8、文件夹封口胶 - 可以生成难以删除的文件夹。
  19. echo;
  20. set input=
  21. set /p input=        请选择:
  22. if "%input%"=="" goto 开始
  23. if "%input%"=="1" call :改名
  24. if "%input%"=="2" call :恢复
  25. if "%input%"=="3" call :演示
  26. if "%input%"=="4" call :演示文件
  27. if "%input%"=="5" call :删除
  28. if "%input%"=="6" call :属性
  29. if "%input%"=="7" call :快捷方式
  30. goto 开始
  31. :属性 修改文件属性:只读-r、存档-a、系统-s、隐藏-h
  32. setlocal disabledelayedexpansion
  33. echo;&echo;            开始批量修改文件属性,可能较慢,请耐心等待  . . .
  34. echo;   ==========================================================================
  35. echo;            清除属性【Y】-r -a -s -h     添加属性【N】+r +a +s +h   
  36. echo;&set input=
  37. set /p input=        请选择[Y/N]:
  38. if "%input%"=="" goto 开始
  39. if /i "%input%"=="Y" for /f "tokens=*" %%a in ('dir /s /b /a') do if not "%%~a"=="!BRT!" (attrib /s /d -r -a -s -h "%%~a")
  40. if /i "%input%"=="N" for /f "tokens=*" %%a in ('dir /s /b /a') do if not "%%~a"=="!BRT!" (attrib /s /d +r +a +s +h "%%~a")
  41. setlocal enabledelayedexpansion
  42. goto :eof
  43. :改名
  44. echo;&echo;            开始批量改名 . . .
  45. echo;   ==========================================================================
  46. echo;            可批量修改当前目录下所有文件和目录的名称为随机数,让其杂乱无章;
  47. echo;            文件Rename.brt备份原文件完整路径名,用于恢复原文件名,请勿删除;
  48. echo;            过程可逆,可通过功能演示【3】 了解工作原理,使用时注意检查即可。
  49. echo;
  50. echo;
  51. set input=
  52. set /p input=        是否继续?[Y/N]:
  53. if "%input%"=="" goto 开始
  54. if "%input%"=="3" call :演示
  55. if /i not "%input%"=="Y" goto :eof
  56. setlocal disabledelayedexpansion&set "FailureDT=Renamed_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.brt"
  57. cd.>FindFile.brt&if exist Rename.brt (ren Rename.brt "%FailureDT%") else cd.>Rename.brt
  58. dir /b /s /a|sort /r>>FindFile.brt
  59. set var=&setlocal enabledelayedexpansion&del Failure.txt>nul
  60. for /f "tokens=*" %%a in (FindFile.brt) do if not "%%~a"=="!BRT!" if not "%%~a"=="!BRTP!FindFile.brt" if not "%%~a"=="!BRTP!%FailureDT%" if not "%%~a"=="!BRTP!Rename.brt" if not "%%~a"=="!BRTP!Failure.txt" (
  61.     set /a num+=!time:~0,2!!time:~3,2!!time:~6,2!!time:~9,2!/3
  62.     set "var=~!random!!num!.tmp"
  63.     echo "%%~pda" "!var!" "%%~nxa"
  64.     Ren "%%~a" "!var!"||echo;"!date! !time!" "%%~a">>Failure.txt
  65.     Rem 以上四行代码用于生成和显示随机数字并将文件名重命名为该数字,可修改成你需要的新名称。
  66. )>>Rename.brt
  67. del FindFile.brt>nul&echo;&if exist Failure.txt echo;&echo;            Renamed Failure!以下文件无法修改,请自行修改!&type Failure.txt
  68. echo;&echo;        改名完成!&pause>nul&goto :eof
  69. :恢复
  70. echo;&echo;            开始批量恢复文件名 . . .
  71. echo;   ==========================================================================
  72. echo;            将当前目录下所有文件的文件名恢复为原来的文件名。
  73. echo;&set input=
  74. set /p input=        请选择[Y/N]:
  75. if "%input%"=="" goto 开始
  76. if /i not "%input%"=="Y" goto :eof
  77. echo;&for /f "tokens=*" %%a in ('sort Rename.brt') do (
  78.     set count=0
  79.     for %%i in (%%a) do (
  80.         set /a count+=1
  81.         if !count!==1 set "var1=%%~i"
  82.         if !count!==2 set "var2=%%~i"
  83.         if !count!==3 set "var3=%%~i"
  84.     )
  85.     ren "!var1!!var2!" "!var3!"||echo;Failure:"!var3!"
  86. )
  87. echo;&echo;        恢复完成!&pause>nul&goto :eof
  88. :暂时不使用!还没有设计好!存在安全隐患!~
  89. echo;&echo;            开始批量删除文件 . . .
  90. echo;   ==========================================================================
  91. echo;            将强制删除当前目录下的所有文件,可能无法恢复数据,请慎用!
  92. echo;&set input=
  93. set /p input=        请选择[Y/N]:
  94. if "%input%"=="" goto 开始
  95. if /i not "%input%"=="Y" goto :eof
  96. md "%temp%\~.tmp">nul
  97. rd /s /q "%temp%\~.tmp\~.tmp">nul
  98. del /f /s /a /q "%temp%\~.tmp\~.tmp">nul
  99. ::在系统临时目录创建一个新的临时目录
  100. for /f "tokens=*" %%a in ('dir /s /b /a') do if not "%%~a"=="!BRT!" (
  101.     echo;%%a
  102.     attrib /s /d -r -a -s -h "%%~a"
  103.     cd.>"%%~a"
  104.     ren "%%~a" "~.tmp"
  105.     move "~.tmp" "%temp%\~.tmp"
  106.     del /f /s /a /q "%temp%\~.tmp\~.tmp"
  107.     cd.>"%%~a\`.tmp"
  108. )
  109. ::将在当前目录下搜索到的文件去掉各种属性,统一重命名为!.tmp,转移到新建的临时目录,然后删除,写入新文件覆盖原来路径。
  110. for /f "tokens=*" %%a in ('dir /s /b /a "%temp%\~.tmp"') do if not "%%~a"=="!BRT!" (rd /q /s "%%~a")
  111. echo;&echo;        删除完成!&pause>nul&goto :eof
  112. :演示
  113. cls&setlocal enabledelayedexpansion
  114. echo;
  115. echo;        开始演示过程,注意观察 演示 文件夹内文件名称的变化 . . .
  116. echo;
  117. call :演示文件
  118. pause
  119. if exist "!BRTP!演示\演示.bat" "!BRTP!演示\演示.bat" R
  120. goto :eof
  121. :开始演示
  122. echo;
  123. call :改名
  124. echo;
  125. pause
  126. echo;
  127. call :恢复
  128. echo;
  129. rd /s /q "!BRTP!演示">nul
  130. echo;&echo;        演示完成!&pause>nul&goto 开始
  131. :演示文件
  132. if exist "!BRTP!演示" rd /s /q "!BRTP!演示">nul&goto :eof
  133. md "!BRTP!演示"
  134. copy "!BRT!" "!BRTP!演示\演示.exe"
  135. cd.>"!BRTP!演示\开始演示.txt"
  136. md "!BRTP!演示\新建文件夹"
  137. cd.>"!BRTP!演示\新建文件夹\我的密码.txt"
  138. md "!BRTP!演示\新建文件夹 (2)"
  139. cd.>"!BRTP!演示\新建文件夹 (2)\Bathome.bat"
  140. cd.>"!BRTP!演示\新建文件夹 (2)\新建 文本文档 (2).txt"
  141. goto :eof
  142. :快捷方式
  143. echo;&echo;            开始生成快捷方式 . . .
  144. pause
  145. goto :eof
复制代码

作者: cjiabing    时间: 2012-4-26 23:37

通常,我的想法很简单,但实现过程很复杂,写代码是一件十分耗时间和体力的活。
    一要考虑功能上的实现。不实现功能,批处理神马都是浮云。但功能实现起来会很复杂,所以要考虑效率和安全。是所谓功能主义和使用主义。
    二要考虑使用体验上的快感。效率和阅读都显得很重要,符合美观,不能放过细节,写的东西让人使用起来有一种自然和满意的感受。是所谓的浪漫主义和快乐主义。
    三要考虑个性精神的传达。崇尚以简为美,但常偏离。持中庸之道,传批处理之道。所谓的思想之上主义。
作者: canyuexiaolang    时间: 2012-4-28 09:19

快捷方式仅仅是echo一下么。。?
作者: canyuexiaolang    时间: 2012-4-28 09:21

本帖最后由 canyuexiaolang 于 2012-4-28 09:37 编辑
  1. @echo off & setlocal EnableDelayedExpansion & cd.>record.txt
  2. set /p test=拖入文件夹:
  3. set "ReName1=yuitysdoyu412341vbn24efg1251dA1241423aaffiyuiyuiyu23DA45hijfd5441mSGSaD24A"
  4. set "ReName2=SD453uiy241o12vaauiyuiasdpqdtuvw12wsDAGAASFASdxyuz1fdhsdgqzcASuFSuyuyu3"
  5. set "ReName3=564afas5vfabvnsirawCDASaui54d4qDSDAauixyuiyyyuVSD56G4S56D12CDASE5F4AS6C"
  6. set "ReName4=qwecf54811asfaasfASDGFAsadfasgfwehg26a58sa6v9snetjufh6a7ks6g596ASgq5f6Y7K"
  7. pushd "!test!" || exit
  8. for /f "tokens=* delims=" %%a in ('dir /b /s /a-d^|sort /r') do call :Makename "%%a"
  9. popd
  10. (echo,改名完成。 & echo,按下回车还原。 & pause>nul)
  11. if not exist "Record.txt" exit
  12. for /f "tokens=1,2 delims==" %%i in (record.txt) do ren "%%i" "%%j"
  13. (echo,恢复完成。 & echo,按下回车退出。 & del record.txt & pause>nul & exit)
  14. :Makename
  15. setlocal
  16. for /l %%i in (1 1 4) do (
  17.     for /l %%j in (1 1 4) do (
  18.         set /a n=!random!%%70
  19.         call set "str=!str!%%ReName%%j:~!n!,1%%"
  20. ))
  21. echo %~dp1!str!%~x1=%~nx1 >> ..\record.txt
  22. ren "%~1" "!str!%~x1"
  23. endlocal
  24. goto :eof
复制代码


有何取舍性?




欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2