Як витягти літеру диска для нового зіставленого диска у .bat?


5

Я створюю простий скрипт резервного копіювання командного рядка, щоб використовувати 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

1
Цікаве питання в загальному випадку, і добре прийнята відповідь, але чи не краще було б просто використовувати назву UNC в команді Robocopy? robocopy C: шлях до: newbox usbox sharename шлях до backup / MIR / Z
Neal

Хм, тепер це цікава пропозиція, і в першу чергу я повинен був розглянути. Так як roboycopy підтримує шляхи UNC (тільки що перевірили його), то так, я замінюю на цю форму. Сказавши це, я підозрюю, що я продовжую знаходити використання для шаблону pushd / popd незалежно. +1
JMD

Відповіді:


6

Використовуйте команди 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.

Це блискуче, Снарк. Дякую.
JMD

1

І, для потомства, ось грубий приклад того, як все це працює. Ще раз дякуємо @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 Тому що це працювало для мене - та.
Umber Ferrule
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.