Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   поиск файла по путям, заданным в произвольной переменной окружения (http://forum.oszone.net/showthread.php?t=237240)

CyberMuesli 24-06-2012 20:52 1939818

поиск файла по путям, заданным в произвольной переменной окружения
 
Все вроде правильно, но при произвольном имени переменной окружения не работает, работает только при явном указании имени. Как выкрутиться?

Код:

@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 1939849

Скажите, что Вы хотите получить в итоге и зачем именно так. Не ясно, зачем нужно использовать подобное.

CyberMuesli 25-06-2012 12:58 1940137

Цитата:

Цитата Iska
Скажите, что Вы хотите получить в итоге»

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


Цитата:

Цитата Iska
Не ясно, зачем нужно использовать подобное. »

Пример сделан для наглядности, а не для практического применения. Он показывает (два 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 1940174

Что мешает в этом гипотетическом примере «раскрыть» переменную окружения предварительно, перед входом в разбор; наподобие:
Код:

@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
Однократный запуск примера снял бы все вопросы. »

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

CyberMuesli 25-06-2012 14:23 1940182

то, что нужно, спасибо.


Время: 10:35.

Время: 10:35.
© OSzone.net 2001-