Как я могу извлечь букву диска для нового сетевого диска в .bat?

Я создаю простой резервный сценарий командной строки для использования robocopy для зеркального отражения "важного" материала к моему полю NAS. Я предпочел бы не полагаться на трудно кодированную букву сетевого диска для того поля NAS. В сценарии я хотел бы отобразить временную букву диска, скопировать соответствующие файлы и избавиться от сетевого диска. Я не хочу предполагать что, если та буква диска уже отображается, что она указывает на место, которое я ожидаю. Я также не хочу "предполагать", что некоторая буква диска доступна, когда я подключаю диск, таким образом продвижение '*'.

    net use * \\nasbox\sharename password /user:username /persistent:no

Каков надлежащий путь в рамках моего .bat сценария для извлечения той буквы диска для использования в последующих командах? Я думал, что мог соединить некоторый вариант "для" парсинга маркера, но я также подозреваю, что должен быть более легкий путь, чем тайный для синтаксиса.

    C:\>net use * \\nasbox\sharename password /user:username /persistent:no
    Drive Z: is now connected to \\nasbox\sharename.

    The command completed successfully.


    C:\>

После того как у меня есть буква сетевого диска, я хотел бы добиться команд вроде:

    robocopy C:\path\to\important\stuff %NewDrive%\path\to\backup /MIR /Z
5
задан 21.10.2009, 23:59

2 ответа

Используйте команды pushd и popd.

pushd \\server\share создаст временный диск (начинающий с Z: и движение назад, пока это не находит доступную букву) и входят в него. Когда Вы сделаны, popd удалит временный диск и вернет Вас, где Вы были.

C:\Users\Snark>pushd /?
Stores the current directory for use by the POPD command, then
changes to the specified directory.

PUSHD [path | ..]

  path        Specifies the directory to make the current directory.

If Command Extensions are enabled the PUSHD command accepts
network paths in addition to the normal drive letter and path.
If a network path is specified, PUSHD will create a temporary
drive letter that points to that specified network resource and
then change the current drive and directory, using the newly
defined drive letter.  Temporary drive letters are allocated from
Z: on down, using the first unused drive letter found.

C:\Users\Snark>popd /?
Changes to the directory stored by the PUSHD command.

POPD


If Command Extensions are enabled the POPD command will delete
any temporary drive letter created by PUSHD when you POPD that
drive off the pushed directory stack.
6
ответ дан 07.12.2019, 17:30

И для потомства вот грубый шаблон того, как это все удается. Еще раз спасибо к @Snark и @Neal.

Вот мой исходный шаблон, с помощью pushd/popd.

    @echo off

    :: Supply credentials for the NAS share.
    net use \\nasbox\sharename password /user:username /persistent:no
    :: Make sure it worked.
    if ERRORLEVEL 1 echo NET USE returned %ERRORLEVEL% && goto :EOF

    :: Use pushd to supply a drive letter for the share.
    pushd \\nasbox\sharename

    :: Copy the files to be backed up. Rinse and repeat.
    robocopy C:\path\to\important\stuff .\path\to\backups /MIR /Z

    :: Release the temporary drive letter.
    popd

    :: Optionally, revoke the credentials while the share's not in use.
    net use \\nasbox\sharename /delete

Обратите внимание на то, что с моим откровением из комментария @Neal, мое определенное приложение pushd/popd является ненужным здесь, и форма команды robocopy просто изменяется на:

    robocopy C:\path\to\important\stuff \\nasbox\sharename\path\to\backups /MIR /Z

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

1
ответ дан 07.12.2019, 17:30
  • 1
    +1, поскольку это работало на меня - ta. – Umber Ferrule 23.10.2009, 14:49

Теги

Похожие вопросы