Board logo

标题: [文件操作] 批处理或VBS替换字符串,最好加在右键菜单里。 [打印本页]

作者: twpanda    时间: 2019-9-2 20:36     标题: 批处理或VBS替换字符串,最好加在右键菜单里。

有点特殊吧,文字我一时半会我也解释不出来,发个图片,希望大神救命。
作者: flashercs    时间: 2019-9-3 00:56

本帖最后由 flashercs 于 2019-9-3 22:26 编辑

保存为a.bat,右键以管理员身份运行
  1. @echo off
  2. REM 设置脚本保存路径
  3. set "batfile=E:\test\New folder\zuma\一键改.bat"
  4. for /f "tokens=1 delims=:" %%A in ('findstr /ben "####*" %0') do (
  5.   >"%batfile%",more +%%A %0
  6. )
  7. reg add "HKEY_CLASSES_ROOT\Directory\Background\shell\mycmd" /ve /t REG_SZ /d "一键改" /f
  8. reg add "HKEY_CLASSES_ROOT\Directory\Background\shell\mycmd" /v "Icon" /t REG_EXPAND_SZ /d "\"%windir%\system32\cmd.exe\",0" /f
  9. reg add "HKEY_CLASSES_ROOT\Directory\Background\shell\mycmd\command" /ve /t REG_SZ /d "\"%batfile%\" \"%%V\"" /f
  10. pause
  11. exit /b
  12. ################################################
  13. 0<1/*,:
  14. @echo off
  15. set str2search="A10"
  16. cd /d "%~1"
  17. set /p dirprefix=请输入替换字符:
  18. for %%A in ("..\%dirprefix%%~nx1") do set "dstdir=%%~fA"
  19. REM md "%dstdir%"
  20. dir /a-d /b|findstr /elv ".xls .xlsx .jpg .png .gif .bmp"|findstr /limc:%str2search% /f:/|Cscript.exe -nologo -e:jscript %0 "%~1" "%dstdir%" %str2search% "%dirprefix%"
  21. exit /b
  22. */
  23. var fso = WSH.CreateObject('Scripting.FileSystemObject');
  24. var wshell = WSH.CreateObject('WScript.Shell');
  25. var currdir = wshell.CurrentDirectory = WSH.Arguments(0);
  26. var dstdir = WSH.Arguments(1);
  27. var str2search = WSH.Arguments(2);
  28. var str2replace = WSH.Arguments(3);
  29. if (!fso.FolderExists(dstdir)) {
  30.   fso.CreateFolder(dstdir);
  31. }
  32. while (!WSH.StdIn.AtEndOfStream) {
  33.   var filename = WSH.StdIn.ReadLine();
  34.   try {
  35.     var tsread = fso.OpenTextFile(filename, 1, false, -2);
  36.     var tswrite = fso.OpenTextFile(fso.BuildPath(dstdir, str2replace + filename), 2, true, -2);
  37.     while (!tsread.AtEndOfStream) {
  38.       tswrite.Write(tsread.ReadAll().replace(RegExp(reEscape(str2search), 'g'), function(){return str2replace;}));
  39.     }
  40.   } catch (e) {
  41.   } finally {
  42.     if (tsread) {
  43.       tsread.close();
  44.     }
  45.     if (tswrite) {
  46.       tswrite.close();
  47.     }
  48.   }
  49. }
  50. function reEscape(str) {
  51.   return str.replace(/[\\^$[(){?*+|.]/g, '\\$&');
  52. }
复制代码

作者: Batcher    时间: 2019-9-3 20:45

下载命令行工具 sed.exe 把它和下面的代码 test.bat 放在A文件夹下
http://bcn.bathome.net/s/tool/index.html?key=sed

执行test.bat
  1. @echo off
  2. set KeyStr=A11
  3. set /p KeyStr=输入替换字符:
  4. cd /d "%~dp0"
  5. for /f "delims=" %%i in ("%~f0\..") do (
  6.     set "OldFolder=%%~nxi"
  7. )
  8. set NewFolder=%KeyStr%%OldFolder%
  9. if not exist "..\%NewFolder%" (
  10.     md "..\%NewFolder%"
  11. )
  12. for /f "delims=" %%i in ('dir /b /a-d ^| findstr /v /r /c:"\.jpg$" /c:"\.xls$" /c:"\.xlsx$"') do (
  13.     if "%%i" neq "%~nx0" (
  14.         echo 正在处理文件 "%%i"
  15.         sed "s/A10/%KeyStr%/g" "%%i" > "..\%NewFolder%\%KeyStr%%%i"
  16.     )
  17. )
复制代码

作者: twpanda    时间: 2019-9-3 21:48

回复 2# flashercs
大神,我将ADD REG改成加到A文件夹右键菜单里为什么不能在A的同级目录下生成新的文件夹,而是在A文件夹下面生成新的文件夹?


reg add "HKEY_CLASSES_ROOT\Directory\shell\mycmd" /ve /t REG_SZ /d "一键改" /f
reg add "HKEY_CLASSES_ROOT\Directory\shell\mycmd" /v "Icon" /t REG_EXPAND_SZ /d "\"%windir%\system32\cmd.exe\",0" /f
reg add "HKEY_CLASSES_ROOT\Directory\shell\mycmd\command" /ve /t REG_SZ /d "\"%batfile%\" \"%%V\"" /f
作者: twpanda    时间: 2019-9-3 21:49

回复 3# Batcher

谢谢,这个好像只能改文件名,文件内的字符没有替换。
作者: Batcher    时间: 2019-9-3 22:13

回复 5# twpanda


    你下载的哪个版本的sed.exe
作者: twpanda    时间: 2019-9-3 22:16

回复 6# Batcher


    4.7
作者: flashercs    时间: 2019-9-3 22:27

回复 4# twpanda


    改成同级目录了
作者: Batcher    时间: 2019-9-3 22:38

回复 7# twpanda


    重新下载一个4.2.2放在C:\Windows\System32\下面试试




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