【问题标题】:String Variables not setting in For Loop未在 For 循环中设置字符串变量
【发布时间】:2013-06-12 01:43:46
【问题描述】:

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

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

【问题讨论】:

  • 试试这个:FOR /F "delims=" %%a in ('findstr /n "^" "temp_sorted_usb_history.txt"')。
  • 谢谢,它实际上正确地捕获了行,脚本中的变量没有设置。我用这个代替“或/F”tokens = 1,2 delims =,“%%b in (temp_sorted_usb_history.txt) do”。感谢您的回复!

标签: batch-file


【解决方案1】:

我不明白你为什么使用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 来解决一些对我来说并不明显的问题。这是使用它的原因的链接:stackoverflow.com/questions/206114/….
  • findstr主要是用来读取空行或者枚举行,但是你的问题不是这些点,不是吗?
  • 谢谢,顺便说一句,脚本现在运行良好!
【解决方案2】:

使用 setlocal 启用elayedexpansion

括号中的变量称为 !variable!而不是 %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
)

【讨论】:

  • 谢谢!我仍在尝试找出差异... Linux没关系..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 1970-01-01
  • 2020-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多