2014-01-21 3 views
0

Когда я запускаю скрипты из файла .CMD,% ~ dp0 получит текущий/рабочий каталог. Он знает пути UNC. Тем не менее, у меня есть несколько сценариев на трех флеш-накопителях, пяти разных портативных дисках и трех разных файловых серверах. Я бы хотел написать один скрипт для работы на всех из них.Отображение источника UNC в качестве диска

Как использовать сценарий для поиска «% ~ dp0», определить, находится ли он в источнике UNC, и если источником является UNC, тогда сопоставьте диск, иначе просто запустите?

ответ

0

Вы можете использовать следующую команду для проверки, если диск отображается -

net use %~d0 2>nul >nul || echo drive not mapped & goto :run 

2>nul >nul перенаправляет как стандартный вывод и стандартный поток ошибок в NUL.

Команда (-ы) после || будет работать только в том случае, если уровень ошибки задан командой net use.

Если вы хотите проверить, если диск находится на удаленном сервере, а не на карту, а затем сопоставить диск -

if "%~d0"=="\\" for /f %%D in (R S T U V W X Y Z) do if not exist %%D:\ (
    net use %%D: %~dp0 >nul 
    set path=%%D: 
    goto :run 
) 

:run 

%~d0 будет равно \\, если запущен скрипт удаленно, но путь есть еще не были отображены.

Петли через R S T U V W X Y Z (маловероятно, чтобы все были отображены - вы можете добавить/удалить буквы), если они являются уже нанесены на карту. Если это не так, сопоставьте путь к этой букве диска и продолжайте со сценарием

0
@echo off 
    setlocal enableextensions 

    (call :ensureMappedRun %*)|| exit /b 

    rem This line is reached when :ensureMappedRun finishes with errorlevel=0 
    rem meaning the batch file is not being executed from a UNC path 

    echo running "%~f0" %* 
    pause 

    endlocal 
    exit /b 0 

:ensureMappedRun 
    rem test if current context is "drive:...." 
    echo %~f0 | findstr /r /i /b /c:"[a-z]:" >nul 2>nul 
    if not errorlevel 1 exit /b 0 

    rem Running from UNC path. Map to drive letter 
    pushd "\\%~p0" 
    if errorlevel 1 (
     echo ERROR : UNC path not accesible or no drive letters available 
     pause 
     exit 
    ) 

    rem Restart the current batch file from the new drive\path 
    call "%cd%\%~nx0" %* 

    rem Clean the drive assignment 
    popd 

    rem And return, signaling the batch has been run redirected 
    exit /b 1 
Смежные вопросы