2016-07-19 4 views
2

コンピュータのリストを通過し、コンピュータからファイルを読み込み、ファイル名を区切り、コンピュータ名とファイル名の結果をエコーするバッチスクリプトを作成しようとしています。私が抱えている問題は、入れ子になったFOR/Rコマンドでコンピュータ名変数を設定することです。ここにスクリプトがあります:変数付きのFORを入れ子にしました

@ECHO OFF 
SetLocal EnableDelayedExpansion 
SET LIST=Computers.txt 
FOR /F %%A IN (%LIST%) DO (
    FOR /R \\%%A\c$\folder1\folder2 %%B IN (*.txt) DO (
     FOR /F "tokens=2 delims=." %%C IN ("%%B") DO (ECHO %%A %%C 
     ) 
    ) 
) 
EndLocal 

ファイル名はRB-C1SRC20160716CL.P17.txtのようなものです。だから私が探している結果は

MyPCName P17 

ですが、私は空白の結果になります。私が見つけたのは、%% Aはテキストファイルから読み込まれていますが、FOR/Rの%% Aは読み込まれていません。 FORコマンドをエコーすると、FOR/R \ MyPCName \ folder1 \ folder2の代わりにFOR/R \%a \ folder1 \ folder2が表示されます。この内訳は、スクリプトの残りの部分が適切に機能しないようにしています。

UPDATE:

おかげで、正しい方向に私を指しているためaschipflします。私はついにスクリプトを動かすことができました。ここでは作業バージョンは次のとおりです。

@ECHO OFF 
SetLocal EnableDelayedExpansion 
SET LIST=Computers.txt 
FOR /F %%A IN (%LIST%) DO (
    SET WKSTN=%%A 
    CALL :SUB 
) 
EndLocal 
GOTO :EOF 

:SUB 
FOR /R \\%WKSTN%\c$\folder1\folder2 %%B IN (*.txt) DO (
     FOR /F "tokens=2 delims=." %%C IN ("%%B") DO (ECHO %%A %%C 
    ) 
) 
+1

関連[[バッチコマンドを使用してサブフォルダのサイズを取得する](http://stackoverflow.com/a/38397052) – aschipfl

答えて

2

for /Rコマンドのルートディレクトリが別のfor変数(%%Iのような)も、残念ながら遅れ拡張(!VAR!)を、使用する変数で与えることはできません。反復的に、通常展開された変数(%VAR%)または引数参照(%1%2、...)のいずれかで指定する必要があります。

for /Rループをサブルーチンに配置し、callを使用してメインルーチンから呼び出します。ルートパスを保持する変数は、callの引数として渡す必要があります。サブルーチンでは、引数参照(%1など)によって参照されます。

Get size of the sub folders only using batch command」の投稿のthis answerを見て、これをどのように達成できるかご覧ください。