返回列表 发帖
本来不想再在这个帖子浪费时间,想想还是贴出来,其他人有可能会参考一下下。
@if(0)==(0) echo off
for %%i in (11 12 13 21 22 23 31 32 33) do set _%%i=1
:Loop
set /p "Input=Input a Number:"
setlocal enabledelayedexpansion
if not defined _!Input! (
    endlocal
    echo;Input Error
    goto :Loop
) else (
    endlocal
    dir /b /a-d *.rcp | findstr /i /v "04T" | cscript -nologo -e:jscript "%~f0" "%Input%"
)
pause & exit
@end
var arg = WSH.Arguments(0);
var arr = ['C0_E0,1,0,0', 'C0_E0,2,0,0', 'C0_E0,3,0,1'];
var reg = new RegExp('C0_E0,[123],0,[01]', 'ig');
var fso = new ActiveXObject('Scripting.FileSystemObject');
var replacement = function(s0) {
    var i = arg.substr(n, 1);
    n += 1;
    return n<=2 ? arr[i-1] : s0;  //replace only 2 times
}
while (!WSH.StdIn.AtEndOfStream) {
    var n = 0;
    var f = WSH.StdIn.ReadLine();
    var objFile = fso.OpenTextFile(f, 1);
    var s = objFile.ReadAll();
    objFile.Close();
    if (s.split(reg).length > 2) {
        s = s.replace(reg, replacement);
        fso.OpenTextFile(f + '.Log', 2, 1).Write(s);
    }
}COPY

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不执行操作;
@echo off
setlocal enabledelayedexpansion
:a
set /p n=Please Input a number:
set x1=C0_E0,1,0,0
set x2=C0_E0,2,0,0
set x3=C0_E0,3,0,1
set a=1
for /l %%i in (1,1,3) do (
    for /l %%j in (1,1,3) do (
        set m=%%i%%j
        if !n! equ !m! (
            set a=
            set a1=!x%%i!
            set a2=!x%%j!
        )
    )
)
if defined a (
    echo,Input error!
    goto :a
)
set Groups="C0_E0,1,0,0" "C0_E0,2,0,0" "C0_E0,3,0,1"
set Sub=`
for /f "delims=" %%i in ('findstr /imr "C0_E0,.*C0_E0," *.RCP^|findstr /iv "04T"') do (
    (for /f "delims=" %%j in ('type "%%i"') do (
        set "str=%%j"
        for %%k in (%Groups%) do set "str=!str:%%~k=%Sub%!"
        for /f "tokens=1,2* delims=%Sub%" %%a in ("!str!") do (
            if not "%%c"=="" (
                echo,%%a!a1!%%b!a2!%%c
            ) else (
                echo,%%j
            )
        )
    ))>"New-%%i"
)
pauseCOPY

TOP

返回列表