컴퓨터 목록을 통해 이동하고 컴퓨터에서 파일을 읽은 다음 파일 이름을 구분하고 컴퓨터 이름과 파일 이름 결과를 반향 출력하는 배치 스크립트를 작성하려고합니다. 내가 겪고있는 문제는 중첩 된 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 var이 텍스트 파일에서 채워지지만 FOR/R의 %% A var이 채워지지 않는다는 것입니다. FOR 명령을 에코 (ECHO)하면 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
)
)
관련 항목 : [배치 명령을 사용하여 하위 폴더의 크기 만 가져 오기] (http://stackoverflow.com/a/38397052) – aschipfl