Basically I wanna find a .wim file and want to know in which volume it is and what the name is.
This is my code:
@for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do @if exist %%a:\*.wim set IMAGEDRIVE=%%a
@echo The Image drive is: %IMAGEDRIVE%
@forfiles /P %IMAGEDRIVE%:\ /S /C "cmd /c set FILENAME=@FNAME"
@echo The File name is: %FILENAME%
@pause
Because i later wanna do this:
dism /apply-image /imagefile:%IMAGEDRIVE%:\%FILENAME%.wim /applydir:w:\ /Index:1
It correctly finds the Volume H where the image.wim file is. But it cant find anything when trying to get the name. The File is there I checked that already.
What am i doing wrong? Or is there a better way of doing it?
Your main problem is that cmd /c set FILENAME=@FNAME"
executes the set
command in a separate process that immediately exits and destroys the variable (it's only available in the child process opened by cmd /c
but not in the calling parent process (where you need it).
I would replace the forfiles
command with another for
loop:
for %%a in (C D E F G H I J K L M N O P Q R S T U V W X Y Z) do for %%b in ("%%a:\*.wim") do set "imagefile=%%b"
echo the File name is: %imagefile%