PDA

Показать полную графическую версию : поиск файла по путям, заданным в произвольной переменной окружения


CyberMuesli
24-06-2012, 20:52
Все вроде правильно, но при произвольном имени переменной окружения не работает, работает только при явном указании имени. Как выкрутиться?

@echo off

setlocal enabledelayedexpansion

set VName=FARHOME
echo for /d %%i in ("far.exe") do echo %%~$!VName!:i
echo for /d %%i in ("far.exe") do echo %%~$FARHOME:i

for /d %%i in ("far.exe") do echo %%~$!VName!:i
for /d %%i in ("far.exe") do echo %%~$FARHOME:i
goto :eof

Iska
24-06-2012, 22:17
Скажите, что Вы хотите получить в итоге и зачем именно так. Не ясно, зачем нужно использовать подобное.

CyberMuesli
25-06-2012, 12:58
Скажите, что Вы хотите получить в итоге»
Надо найти некий файл, при этом искать его по путям, которые заданы в произвольной переменной окружения. Файл произвольный, для примера far.exe Имя переменной окружения произвольное, для примера FARHOME. В примере файл ищется, если FARHOME явно прописана в коде: %%~$FARHOME:i. Написать универсальный код не удается: раскрытие переменной VName в ее значение FARHOME не работает в конструкции %%~$!VName!:i


Не ясно, зачем нужно использовать подобное. »
Пример сделан для наглядности, а не для практического применения. Он показывает (два echo), что команда для for формируется правильно в обоих случаях, но результаты for разные, не работает раскрытие переменной VName в ее значение FARHOME. Однократный запуск примера снял бы все вопросы. Привожу результаты:


C>test.bat
for /d %i in ("far.exe") do echo %~$FARHOME:i
for /d %i in ("far.exe") do echo %~$FARHOME:i
Режим вывода команд на экран (ECHO) отключен.
C:\Program Files\Far\Far.exe

Iska
25-06-2012, 14:15
Что мешает в этом гипотетическом примере «раскрыть» переменную окружения предварительно, перед входом в разбор; наподобие:
@echo off
setlocal enableextensions enabledelayedexpansion

set sVarName=FARHOME
call set sVar=%%%sVarName%%%
rem Или
rem set sVar=!%sVarName%!

for %%i in (far.exe) do echo %%~$sVar:i

endlocal
exit /b 0

?

Однократный запуск примера снял бы все вопросы. »
Ан нет. Можно запускать хоть сотню раз, коллега. Однако ж, сие не даст ответ на заданные мною вопросы. Для этого нужны именные пояснения (которые Вы дали постом выше).

CyberMuesli
25-06-2012, 14:23
то, что нужно, спасибо.




© OSzone.net 2001-2012