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

Batch file 未在For循环中设置字符串变量,batch-file,Batch File,我想我有一个简单的问题。我有一个文件,试图将输出格式化为列。我想我在这里找到了一种方法,但是string1和string2变量没有设置。有什么想法吗?我不熟悉Windows脚本编写,来自Linux,在Linux中编写脚本要容易得多 这样做: San Disk USB Drive, 10-12-2013 Superdrive Disk USB Drive, 10-11-2013 像这样: San

我想我有一个简单的问题。我有一个文件,试图将输出格式化为列。我想我在这里找到了一种方法,但是string1和string2变量没有设置。有什么想法吗?我不熟悉Windows脚本编写,来自Linux,在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
    )   

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

使用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
)

使用setlocal启用DelayedExpansion

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

您有两个不使用的字符串!变量符号,它们应该

但是,如果引号不是变量的一部分,可以使用这种语法样式,并删除另外两行

            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
)

我不明白您为什么要使用
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

我不明白您为什么要使用
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

尝试以下操作:
FOR/F“delims=“%%a in('findstr/n“^”temp\u sorted\u usb\u history.txt“)
。可能是重复的感谢,它实际上正确捕获了行,脚本中的变量没有设置。我改为使用“or/F”标记=1,2 delims=,“%(temp_sorted_usb_history.txt)do中的%%b”。感谢您的回复!尝试以下操作:
FOR/F“delims=“%%a in('findstr/n“^”temp\u sorted\u usb\u history.txt“)
。可能是重复的感谢,它实际上正确捕获了行,脚本中的变量没有设置。我改为使用“or/F”标记=1,2 delims=,“%(temp_sorted_usb_history.txt)do中的%%b”。感谢您的回复!谢谢我读到人们使用findstr来回避一些我并不清楚的问题。下面是使用它的理由的链接:。
findstr
主要用于读取空行或枚举行,但您的问题没有这些要点,不是吗?谢谢,顺便说一句,脚本现在运行得很好!谢谢我读到人们使用findstr来回避一些我并不清楚的问题。下面是使用它的理由的链接:。
findstr
主要用于读取空行或枚举行,但您的问题没有这些要点,不是吗?谢谢,顺便说一句,脚本现在运行得很好!谢谢我还在努力找出不同之处。。。Linux没关系,谢谢!我还在努力找出不同之处。。。没关系。。