Компьютерный форум 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=231268)

defor6 26-03-2012 00:38 1886731

Не подхватывает заданную переменную для пути
 
Вечер добрый. Ситуация у меня повторяется довольно часто, сам решения найти не могу.
Суть скрипта:
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 1886750

Фактическая ошибка — лишний пробел при присвоении в:
Код:

… 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 1886795

Снимаю шляпу. Большое спасибо.


Время: 15:01.

Время: 15:01.
© OSzone.net 2001-