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 が有効になっている場合は、delayedexpansion

括弧内の変数は !variable! と呼ばれます。%変数%の代わりに

!variable! を使用しない文字列が 2 つあります。記法であり、そうすべきです。

ただし、引用符が実際には変数の一部ではないこのスタイルの構文を使用して、他の 2 行を削除することもできます。

            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 に答える