2

我想我有一个简单的问题。我有一个文件,我试图将输出格式化为列。我想我在这里找到了一种方法,但是未设置 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
    )   

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

4

2 回答 2

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
于 2013-06-11T17:43:46.350 回答
1

使用 setlocal enabledelayedexpansion

括号中的变量称为!变量!而不是 %variable%

您有两个不使用 !variable! 的字符串!符号,他们应该。

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

            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
)
于 2013-06-11T17:09:25.900 回答