字符串变量未在For循环中设置

时间:2013-06-11 16:43:22

标签: batch-file

我想我有一个简单的问题。我有一个文件,我正在尝试将输出格式化为列。我想我找到了一种方法,但是string1和string2变量没有设置。有任何想法吗?我不熟悉Windows脚本,而且来自Linux,它更容易。

制作本:

                 San Disk USB Drive, 10-12-2013
                 Superdrive Disk USB Drive, 10-11-2013

看起来像这样:

                 San Disk USB Drive            10-12-2013
                 Superdrive Disk USB Drive     10-11-2013

我正在使用的代码来阅读文本文件:

    FOR /F "usebackq delims=" %%a in (`"findstr /n ^^ temp_sorted_usb_history.txt"`) do (
        set "var=%%a"
        SETLOCAL EnableDelayedExpansion
        set "var=!var:*:=!"
        echo(!var!
        for /F "tokens=1,2 delims=," %%b in ("!var!") do (
                echo %%b%%c
                set string1=%%b
                set string2=%%c
                set string1="%string1%                                        "
                set string2="%string2%                                        "
                echo !string1:~-40! !string2:~-40!
            )
        ping -n 4 -w 1 127.0.0.1 >NUL
        ENDLOCAL
    )   

问题是我无法设置字符串变量。

2 个答案:

答案 0 :(得分:3)

我不明白你为什么使用findstr命令。这就是我这样做的方式:

setlocal EnableDelayedExpansion
for /F "tokens=1,2 delims=," %%b in (temp_sorted_usb_history.txt) do (
   echo %%b%%c
   set "string1=%%b                                        "
   set "string2=%%c                                        "
   echo !string1:~0,40! !string2:~0,40!
)
ping -n 4 -w 1 127.0.0.1 >NUL

答案 1 :(得分:1)

使用setlocal enabledelayedexpansion

括号中的

变量称为!变量!而不是%变量%

你有两个不使用的字符串!变量!符号,他们应该。

然而,您可以使用这种语法,其中引号实际上不是变量的一部分,并消除了另外两行。

            set "string1=%%b                            "
            set "string2=%%c                            "

另一种选择可能是将日期放在首位,按日期排序很简单。

@echo off
for /F "tokens=1,2 delims=," %%b in (temp_sorted_usb_history.txt) do (
echo %%c - %%b
)