Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Iska, телепатией не страдаю, при той постановке приходится фантазировать по полной программе. »
Это — да, согласен.


Цитата megaloman:
Кстати, почему-то в одну строку наманер
Set A="\\Srv1\Admin\"& if exist %A% (Echo %A% имеется) Else (Echo %A% отсутствует)
у меня не получилось, что-то неверно в синтаксисе. »
Всё верно. Просто «%A%» раскрывается в момент интерпретации всей строки, целиком, т.е.:
Код: Выделить весь код
Set A="\\Srv1\Admin\"& if exist %A% (Echo %A% имеется) Else (Echo %A% отсутствует)
Естественно, переменная окружения «A» к этому моменту пустая. Это поведение равнозначно поведению переменной окружения внутри скобок («for … do (…)», «if … (…) else (…)» и т.п.).

Вот, посмотрите:
Код: Выделить весь код
rem @echo off
setlocal enableextensions enabledelayedexpansion


set "sPath=%~dp0" & if exist "%sPath%" (echo [%sPath%] exists) else (echo [%sPath%] not found)

endlocal
exit /b 0
Цитата:
Код: Выделить весь код
E:\Песочница\0268>rem @echo off

E:\Песочница\0268>setlocal enableextensions enabledelayedexpansion

E:\Песочница\0268>set "sPath=E:\Песочница\0268\"   & if exist "" (echo [] exists )  else (echo [] not found )
[] not found

E:\Песочница\0268>endlocal

E:\Песочница\0268>exit /b 0
Переменная «sPath» раскрывается в момент интерпретации строки, и потому — пуста.

Можно ещё так показать этот момент:
Код: Выделить весь код
rem @echo off
setlocal enableextensions enabledelayedexpansion

set "sPath=bla-bla-bla"

set "sPath=%~dp0" & if exist "%sPath%" (echo [%sPath%] exists) else (echo [%sPath%] not found)

endlocal
exit /b 0
Цитата:
Код: Выделить весь код
E:\Песочница\0268>rem @echo off

E:\Песочница\0268>setlocal enableextensions enabledelayedexpansion

E:\Песочница\0268>set "sPath=bla-bla-bla"

E:\Песочница\0268>set "sPath=E:\Песочница\0268\"   & if exist "bla-bla-bla" (echo [bla-bla-bla] exists )  else (echo
 [bla-bla-bla] not found )
[bla-bla-bla] not found

E:\Песочница\0268>endlocal

E:\Песочница\0268>exit /b 0
Вывод — нужно использовать отложенное раскрытие переменной:
Код: Выделить весь код
rem @echo off
setlocal enableextensions enabledelayedexpansion

set "sPath=%~dp0" & if exist "!sPath!" (echo [!sPath!] exists) else (echo [!sPath!] not found)

endlocal
exit /b 0
Цитата:
Код: Выделить весь код
E:\Песочница\0268>rem @echo off

E:\Песочница\0268>setlocal enableextensions enabledelayedexpansion

E:\Песочница\0268>set "sPath=E:\Песочница\0268\"   & if exist "!sPath!" (echo [!sPath!] exists )  else (echo [!sPath
!] not found )
[E:\Песочница\0268\] exists

E:\Песочница\0268>endlocal

E:\Песочница\0268>exit /b 0
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:31, 05-06-2013 | #8