Войти

Показать полную графическую версию : [решено] Не подхватывает заданную переменную для пути


defor6
26-03-2012, 00:38
Вечер добрый. Ситуация у меня повторяется довольно часто, сам решения найти не могу.
Суть скрипта:
1) Определяем букву диска, на котором находится определенная папка (в реальности определяется буква флешки) и заносим это значение в переменную FLASH
2) Если путь не найден - гневная мессага и последующий выход из скрипта :)
3) Если путь найден - выводим сообщением букву флешки. А вот далее эту букву хотелось бы передать в определенный файл. Собственно, не работает кусок кода:

echo %FLASH% > %FLASH%\C#\tmp.txt
Пишет "Отказано в доступе". Ощущение, что не может обработать переменную, ибо если путь задавать, скажем, G:\C#\tmp.txt, то все проходит отлично. Но в то же время, эта же переменная на 1 строку выше по коду отлично обрабатывается и выводится верно.


Вот полный кусок кода. Заранее спасибо за любую помощь.


@echo off
echo Ищем исходники на флешке
echo Критерий: наличие \C#\STDU FLASH\ на диске (D:-J:)
echo.
if exist "D:\C#\STDU FLASH\" set FLASH=D: && goto 2
if exist "E:\C#\STDU FLASH\" set FLASH=E: && goto 2
if exist "F:\C#\STDU FLASH\" set FLASH=F: && goto 2
if exist "G:\C#\STDU FLASH\" set FLASH=G: && goto 2
if exist "H:\C#\STDU FLASH\" set FLASH=H: && goto 2
if exist "I:\C#\STDU FLASH\" set FLASH=I: && goto 2
if exist "J:\C#\STDU FLASH\" set FLASH=J: && goto 2

echo На флешке исходных данных НЕ НАЙДЕНО! Выходим!
pause
exit

:2
echo Папка c исходниками найдена на флешке. Диск - %FLASH%
echo %FLASH% > %FLASH%\C#\tmp.txt
pause

Iska
26-03-2012, 01:54
Фактическая ошибка — лишний пробел при присвоении в:
… set FLASH=D: && goto 2
после имени диска и двоеточия. Должно быть так:
… set FLASH=D:&& goto 2

Вторая ошибка того же типа. Не:
echo %FLASH% > %FLASH%\C#\tmp.txt
а:
echo %FLASH%> %FLASH%\C#\tmp.txt

Для ясности можно перенести перенаправление вывода перед командой:
>%FLASH%\C#\tmp.txt echo %FLASH%

А проще заменить весь перебор на:
@echo off
setlocal enableextensions enabledelayedexpansion

echo Ищем исходники на флешке
echo Критерий: наличие \C#\STDU FLASH\ на диске (D:-J:)
echo.

set /a bFound = 0

for %%i in (D E F G H I J) do (
if exist "%%i:\C#\STDU FLASH\." (
echo Папка c исходниками найдена на [%%i:].
>"%%i:\C#\tmp.txt" echo %%i:
set /a bFound = 1
)
)

if %bFound% equ 0 echo Папка c исходниками не найдена.

endlocal
exit /b 0

defor6
26-03-2012, 08:18
Снимаю шляпу. Большое спасибо.




© OSzone.net 2001-2012