[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖
本来不想再在这个帖子浪费时间,想想还是贴出来,其他人有可能会参考一下下。
  1. @if(0)==(0) echo off
  2. for %%i in (11 12 13 21 22 23 31 32 33) do set _%%i=1
  3. :Loop
  4. set /p "Input=Input a Number:"
  5. setlocal enabledelayedexpansion
  6. if not defined _!Input! (
  7.     endlocal
  8.     echo;Input Error
  9.     goto :Loop
  10. ) else (
  11.     endlocal
  12.     dir /b /a-d *.rcp | findstr /i /v "04T" | cscript -nologo -e:jscript "%~f0" "%Input%"
  13. )
  14. pause & exit
  15. @end
  16. var arg = WSH.Arguments(0);
  17. var arr = ['C0_E0,1,0,0', 'C0_E0,2,0,0', 'C0_E0,3,0,1'];
  18. var reg = new RegExp('C0_E0,[123],0,[01]', 'ig');
  19. var fso = new ActiveXObject('Scripting.FileSystemObject');
  20. var replacement = function(s0) {
  21.     var i = arg.substr(n, 1);
  22.     n += 1;
  23.     return n<=2 ? arr[i-1] : s0;  //replace only 2 times
  24. }
  25. while (!WSH.StdIn.AtEndOfStream) {
  26.     var n = 0;
  27.     var f = WSH.StdIn.ReadLine();
  28.     var objFile = fso.OpenTextFile(f, 1);
  29.     var s = objFile.ReadAll();
  30.     objFile.Close();
  31.     if (s.split(reg).length > 2) {
  32.         s = s.replace(reg, replacement);
  33.         fso.OpenTextFile(f + '.Log', 2, 1).Write(s);
  34.     }
  35. }
复制代码

TOP

回复 30# qixiaobin0715

可以在 goto :a 的上一行插入 endlocal

TOP

回复 32# WHY
实际上代码中延迟变量开关位置设置有问题,不应当放在循环内,把setlocal enabledelayedexpansion移到@echo off下一行,就不会出现报错的问题。谢谢提醒!

TOP

回复 31# WHY


    新文本更改后缀会不能识别,改成前缀比较好,替换源文件用这个 fso.OpenTextFile(f & ".RCP", 2, True).Write s为甚报错 没有指定Input a Number:22
C:\Users\1111\Desktop\PI\PTN测试新.bat(36, 9) Microsoft JScript 运行时错
误: 'True' 未定义

请按任意键继续. . .

TOP

回复 21# haichuan5121
根据24楼代码进行完善,满足21楼2个附加条件:
1.非法输入提示重新输入;
2.只有一组C0-E0不执行操作;
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. :a
  4. set /p n=Please Input a number:
  5. set x1=C0_E0,1,0,0
  6. set x2=C0_E0,2,0,0
  7. set x3=C0_E0,3,0,1
  8. set a=1
  9. for /l %%i in (1,1,3) do (
  10.     for /l %%j in (1,1,3) do (
  11.         set m=%%i%%j
  12.         if !n! equ !m! (
  13.             set a=
  14.             set a1=!x%%i!
  15.             set a2=!x%%j!
  16.         )
  17.     )
  18. )
  19. if defined a (
  20.     echo,Input error!
  21.     goto :a
  22. )
  23. set Groups="C0_E0,1,0,0" "C0_E0,2,0,0" "C0_E0,3,0,1"
  24. set Sub=`
  25. for /f "delims=" %%i in ('findstr /imr "C0_E0,.*C0_E0," *.RCP^|findstr /iv "04T"') do (
  26.     (for /f "delims=" %%j in ('type "%%i"') do (
  27.         set "str=%%j"
  28.         for %%k in (%Groups%) do set "str=!str:%%~k=%Sub%!"
  29.         for /f "tokens=1,2* delims=%Sub%" %%a in ("!str!") do (
  30.             if not "%%c"=="" (
  31.                 echo,%%a!a1!%%b!a2!%%c
  32.             ) else (
  33.                 echo,%%j
  34.             )
  35.         )
  36.     ))>"New-%%i"
  37. )
  38. pause
复制代码

TOP

返回列表