批次:在禁用回声的错误中设置变量结束

时间:2018-06-20 08:12:11

标签: batch-file variables cmd

我已经完成了我的批处理文件的99%的工作,现在我正面临最后的障碍,似乎并不想消失。这是当前的脚本:

@echo off 

SET SPT4="C:\Testfolder\Test.Screen.txt"
SET SPT6="C:\Testfolder\Test.Screen.Temp.txt"

Type %SPT4% | Findstr "SerialNumberID= UserFriendlyName=" > C:\Testfolder\Temp.txt

Echo Screenmodel: > %SPT6%

for /f "delims=" %%x in (C:\Testfolder\Temp.txt) DO (
    echo %%x
    ::Processing the gained informations.
    set SN1=%%x
    echo %SN1%
    set "list=%SN1: =%"
    echo %list%
    set "list=%x:{= %"
    set "list=%list:}= %"
    set "list=%list:SerialNumberID= %"
    set "list=%list:UserFriendlyName= %"

    Echo %list%

    SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
    (
        FOR %%y IN (%list%) DO (
            cmd /c exit %%y
            <nul set /p =!=exitcodeAscii!
        ) >> %SPT6%
    )
    Echo. >> %SPT6%
)

del C:\Testfolder\Temp.txt

timeout 10 /nobreak > nul

该脚本首先定义变量,并使用另一个文件中提供的屏幕信息过滤出一个文件,所以我最后只保存了Temp.txt中保存的4行。

以下是文件“ Temp.txt”中的信息

  

SerialNumberID = {89,86,51,84,49,55,52,49,52,49,0,0,0,0,0,0}

     

UserFriendlyName = {66,49,57,45,54,32,76,69,68,0,0,0,0}

     

SerialNumberID = {53,90,48,57,54,55,51,52,78,66,0,0,0,0,0,0}

     

UserFriendlyName = {69,65,50,52,52,87,77,105,0,0,0,0,0}

脚本本身运行良好,但我需要删除所有不必要的字符,例如“ = {}”。因此,为了这样做,我想将信息传递到var %list%,但是当我想回显它时,我只会收到一条消息,例如

  

禁用回声/禁用回声命令

最终输出也不是一个清晰的名字,而是一个空行。

当我用%% x替换%list时,整个过程都按预期工作,但是由于“ = {}”,所有行中的第一个字母都丢失了

有人可以给我一个解决方案的想法吗?我知道这可能很小,我可能会丢失。

解决方案:

我必须用以下内容替换代码的中间部分:

SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
(
    for /f "delims=" %%x in (C:\Testfolder\Temp.txt) DO (
        ::Processing the gained informations.
        set SN1=%%x
        echo !SN1!
        set "list=!SN1!"
        echo 1 !list!
        set "list=!list:}= !"
        echo 2 !list!
        set "list=!list:{= !"
        echo 3 !list!
        set "list=!list:SerialNumberID= !"
        echo 4 !list!
        set "list=!list:UserFriendlyName= !"
        echo 5 !list!

        echo.
        SETLOCAL ENABLEEXTENSIONS ENABLEDELAYEDEXPANSION
        (
            FOR %%y IN (!list!) DO (
                cmd /c exit %%y
                <nul set /p =!=exitcodeAscii!
            ) >> %SPT6%
        )
        Echo. >> %SPT6%
    )
)

所以实际的问题是我试图使用%var%之类的变量代替!var!

0 个答案:

没有答案