5

私はバッチファイルを初めて使用し、作業の一部を実行するためにバッチファイルを作成しようとしています(怠惰な権利を知っています)

これまでのところ、私は以下を持っています...

SET skip=1

REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO ( 
SET TgtDir =%%i
echo %TgtDir% >> C:\result.txt
)

Repos.txt の内容は次のとおりです。

60000
C:\somedir\someotherdir\
C:\a\b\c\

基本的に、このスクリプトは、後で遅延設定に使用される最初の行を無視してファイルを通過し、各行を抽出してから (理想的には) cd コマンドに渡しますが、今のところ取得しようとしています。変数 TgtDir に入れます。

このスクリプトを実行すると、C:\result.txt の出力は次のようになります。

ECHO is on.
ECHO is on.

何か助けはありますか?

4

2 に答える 2

10

バッチ ファイルのEnableDelayedExpansionオプションを確認する必要があります。前述のリンクから:

遅延変数展開は、FOR ループを使用する場合に便利です。通常、FOR ループ全体は、バッチ スクリプトの複数行にわたる場合でも、1 つのコマンドとして評価されます。

したがって、スクリプトは次のようになります。

@echo off
setlocal enabledelayedexpansion
SET skip=1

REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO (
    SET TgtDir=%%i
    echo !TgtDir! >> C:\result.txt
)

%%i別の方法として、新しい変数を作成するのではなく、内側のループで変数を使用するだけです。

于 2012-09-20T13:41:20.357 に答える
0
@echo off
setlocal enabledelayedexpansion
SET skip=1
REM for all the directories indicated to contain core repositories
FOR /F "skip=%skip% delims=" %%i IN (C:\Repos.txt) DO echo %%n>>c:result.txt
于 2014-05-01T19:27:21.037 に答える