返回列表 发帖
回复 10# Linux9253

已修改

TOP

本帖最后由 Linux9253 于 2015-7-6 21:53 编辑

回复 9# pcl_test


    非常感谢,真厉害、是不是可以多次添加、假如有rem var2 、rem var3呢、下面是我修改的代码
但好像不行、求教。。。还有就是还有就是变量延迟的问题 ,好像只要是类似与!n!这样的变量都输出的不是原样了、
真的非常感谢、、、、
@echo off& setlocal enabledelayedexpansion
(for /f "delims=" %%a in ('findstr /n .* "123.txt"') do (
set "str=%%a"&set "n="
call :loop
))>"结果.txt"
pause
::判断每行首个:的位置
:loop
for %%b in (0 1 2 3) do if "!str:~%%b,1!" equ ":" (
set /a n=%%b+1
    for %%c in (!n!) do if "!str:~%%c!" equ "rem var1" (
        echo;!str:~%%c!
        ::插入的内容
        echo;set %file1%1= ^&set %file1%2= ^&set %file1%3= ^&set %file1%4=
    ) else (if "!str:~%%c!" equ "rem var2"
echo;!str:~%%c!
echo;admin
)else echo;!str:~%%c!
goto :eof))COPY

TOP

本帖最后由 pcl_test 于 2015-7-6 22:03 编辑

回复 17# Linux9253
没发现什么变量延迟问题,不知你说的什么
    for %%c in (!n!) do if "!str:~%%c!" equ "rem var1" (
        echo;!str:~%%c!
        echo;测试1
    ) else if "!str:~%%c!" equ "rem var2" (
        echo;!str:~%%c!
        echo;测试2
    ) else if "!str:~%%c!" equ "rem var3" (
        echo;!str:~%%c!
        echo;测试3
    ) else echo;!str:~%%c!COPY

TOP

回复 18# pcl_test


    真的很感谢、你解决我%98的问题了、厉害
你知道的。我修改的对象是一个bat脚本、里面启用的变量延迟(就是!str!)形式的、
就用两个!!号、中间加一个字符串,我用你的代码执行后、可以完美的替换和保留空行、
但是变量延迟的部分就变的莫名其妙了、我给你截图、

图片左边是样本,右边是执行的结果,看第三行,昨边是!n!,右边变成“2”,
我测试过只要是这种类型的都是一样、都找不到规律、求大神帮忙看看,,,

TOP

为什么要分割:号呢?难道要处理:号左右的数据?如果想加载所有用
for /f "tokens=* delims=" %%i in (myfile.txt) do ()
循环提取N次在%%i(这里已经加载了所有只是数据不一样)的前提下再次提取也许会达到要求

TOP

本帖最后由 pcl_test 于 2015-7-7 00:48 编辑

回复 19# Linux9253
1>1/* :
@echo off
dir /b "测试.txt"|cscript -nologo -e:jscript "%~f0"
echo 完成!
ping -n 2 0 >nul&exit/b
*/
function toFile(file){
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f1 = fso.OpenTextFile(file,1,false);
var f2 = fso.CreateTextFile("$NEW_"+file,1);
var txt="";
while(!f1.AtEndOfStream){
var str=f1.ReadLine();
if (str=="rem var1"){
    txt=str+"\r\n"+"测试内容1";
}else if (str=="rem var2"){
    txt=str+"\r\n"+"测试内容2";
}else if (str=="rem var3"){
    txt=str+"\r\n"+"测试内容3";
}else{txt=str;}
f2.WriteLine(txt);
}
f1.Close();
f2.Close();
}
while(!WScript.StdIn.AtEndOfStream){
var f=WScript.StdIn.ReadLine();
toFile(f);
}COPY
1

评分人数

TOP

为什么要分割:号呢?难道要处理:号左右的数据?如果想加载所有用
for /f "tokens=* delims=" %%i in (myfile ...
/zhqsystem/zhq 发表于 2015-7-7 00:32



    这样不打印空行的

TOP

本帖最后由 Linux9253 于 2015-7-7 09:41 编辑

回复 21# pcl_test


    刚才我看见时间是凌晨的、谢谢、当时我还以为你都睡了呢、太有乐于助人的精神了、
还有最后一个问题、如果在指定位置添加的不是一行内容、而是三行呢?还有就是要添加的
字符不能是变量嘛?我刚才试了试、好像变量%a% 被打印成原字符了(%a%)
不好意思、有麻烦你了

TOP

回复 23# Linux9253
按B文件原样输出,所以变量没有变成值,需直接用值,或在B文件中对变量赋值
if (str=="rem var1"){
    txt=str+"\r\n"+
        "第一行\r\n"+
        "第二行\r\n"+
        "第三行";
}else if (str=="rem var2"){
    txt=str+"\r\n"+
        "第一行\r\n"+
        "第二行\r\n"+
        "第三行";
}else if (str=="rem var3"){
    txt=str+"\r\n"+
        "第一行\r\n"+
        "第二行\r\n"+
        "第三行";
}else{txt=str;}COPY

TOP

回复  Linux9253
按B文件原样输出,所以变量没有变成值,需直接用值,或在B文件中对变量赋值
pcl_test 发表于 2015-7-7 10:54



    真的非常感谢、您完美的解决了我的问题、再次谢谢。。。

TOP

额,换个思路,将B批处理的代码都写到A里面,用echo将B一行行打印出来,要修改B的指定内容就成了修改一个变量的内容了。。。。。。。。。。。。。。

TOP

没大看懂 发个保留空行的
@echo off
set filename="1.txt"
for /f "delims=0123456789" %%a in ('findstr /n .* %filename%') do (
    set "s=%%a"
    setlocal enabledelayedexpansion
    echo;!s:~1!
    if /i "!s:~1!" == "rem var1" (
       echo;rem var1
    ) else if /i "!s:~1!" == "rem var2" (
       echo;rem var2
    )
    endlocal
)
pauseCOPY

TOP

返回列表