Вопрос чайника 3 Cкрипт для .bat .cmd

  1. 2 г. назад

    Наверняка частая задача, все уже сталкивались.
    Есть такая команда, для получения имени раздела диска:

    mountvol d: /L

    Выдает такой результат:

        \\?\Volume{b645982e-4859-11e8-a790-a08869171af0}\

    Мне нужно в батнике вызвать такую команду:

    mountvol c:\D {VolumeName}

    где вместо {VolumeName} Подставить то, что выдала предудыщая команда.
    Например:

    mountvol c:\D \\?\Volume{b645982e-4859-11e8-a790-a08869171af0}\

    Казалось бы херня-вопрос. И тут же всем на ум приходит команда. Но какая именно команда?

    И отсюда вопрос: как без особой боли решить эту простую задачу?

  2. записать в файл:
    >> volname.txt

    считать:

    FOR /F "usebackq tokens=* delims=" %%i IN ("volname.txt") DO (ECHO %%i)

    Ответы: (3) (4)
  3. я машинный программист

  4. andrewks записать в файл:
    >> volname.txt

    считать:

    FOR /F "usebackq tokens=* delims=" %%i IN ("volname.txt") DO (ECHO %%i)

    Почему FOR если нужно одно значение только применить, а не массив? Как-то костыльно.

    Ответы: (7)
  5. andrewks Спасибо. Ничего лучше, похоже, все равно не посоветуют.

  6. 25.01.2022 23:12:20 отредактировано webdev

    Сделал так:

    for /f %%a in ('mountvol d: /l') do mountvol c:\d %%a
  7. в гугл клауде вроде можно export пользовать
    но я не настоящий электрик

  8. Может на PowerShell можно по-человечески запрограммировать?

  9. Или на wsl?

  10. В принципе wsl можно заюзать, такая команда работает:

    mountvol | wsl grep "\\\\"

    Но я в линухах полный ноль, так что нужна помощь гур.

    Ответы: (12) (14)
  11. Курильщик (11) да зачем wsl, утилиты для обработки потоков можно отдельно поставить.

    Ненене! Ничего не ставить. Только то что уже установлено можно юзать.

  12. Курильщик гуглитсяпо слову cygwin

    в cmd: 'cygwin' is not recognized as an internal or external command, operable program or batch file.
    в wsl: /bin/bash: cygwin: command not found

  13. Курильщик IMG_20220127_174205.jpg

    странно что ты разработчик а git у тебя не установлен. ты точно разработчик?
    вместе с git обычно идет комплект утилит.

    Я не говорил что гит у меня не установлен.

  14. Нафиг cygwin, если wsl то же самое умеет делать изкоробки?

  15. Курильщик с гитом идет и sed и awk и grep

    Под виндой?

    Ответы: (22) (24) (26)
  16. Курильщик с гитом идет и sed и awk и grep

    Не идет. cygwin проверял, его точно нет.
    -image-

    Ответы: (23)
  17. Курильщик (20) в папке git/mingw64/bin

    Под виндой нету. Нашел только x86_64-w64-mingw32-agrep

    Ответы: (25) (28)
  18. Курильщик (20) в папке git/mingw64/bin
    git/usr/bin/

    Да нету там. Если бы было, в командной строке оно бы выполнялось. Поискал даже:

    -image-

    Ответы: (29) (30) (31)
  19. Курильщик (24) git/usr/bin

    Спасибо, не знал. Век живи - век учись.

  20. 27.01.2022 18:09:11 отредактировано webdev

    Курильщик (26) где у тебя git лежит?

    C:\Program Files\Git\bin

    Там всего три файла:

    bash, git, sh

  21. Курильщик глянь что лежит в C:\Program Files\Git\usr\bin

    Да, нашел, спасибо.
    Но это ничем не помогло, потому что все то же самое есть в wsl

    Ответы: (34) (35) (36) (37)
  22. Курильщик (33) да но wsl это отдельный слой эмуляции а в bin лежит собранное под твою систему.
    в любом случае сам решай как удобнее, мне проще напрямую вызывать утилиты в скриптах. а путь до них меня прописан в path

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

  23. Курильщик (33) у меня кстати за рабочей машине политиками запрещено ставить wsl, т.к. это по сути виртуалка и внутри может крутиться все что угодно.

    Если ты админ, то можешь это обойти.
    Мне как раз для обхода политик понадобилось делать монтирование разделов, чтобы флэшки можно было втыкать в комп.

    Ответы: (39)
  24. Если в винде флэшка не примонтировалась, то и в wsl тоже недоступна, так что не получится все что угодно

  25. Курильщик нет смысла мне тратить на это время, да и не предмет обсуждения в ветке. я инфой про утилиты поделился а ты уж сам решай нужно или нет.

    Ну ок. Утилиты то есть. Вопрос как сделать то что мне нужно сделать.
    Более красиво чем с FOR

  26. Курильщик mountvol.exe d: /L | cut -f2 -d '{' | cut -f1 -d '}'>%temp%\mvol.$$$

    set /p mvol=<%temp%\mvol.$$$

    echo volume is: %mvol%

    Интересно.
    Вот так не работает: mountvol.exe d: /l | (set /p mvol= && %mvol%)

    А вот так работает: mountvol.exe d: /l | (set /p mvol= && set mvol)

    Почему так?
    Хочу чтобы второй вариант работал. Первый мне не подходит.

    Ответы: (46)
  27. Точнее, понятно почему так. Потому что %mvol% рассчитывается еще до начала выполнения команды, когда она еще не определена.
    Как сделать чтобы она рассчитывалась на этапе выполнения, чтобы можно было подставить в другую команду, в той же строке?

  28. webdev Хочу чтобы второй вариант работал. Первый мне не подходит.

    Опечатка. Нужно чтобы работал вариант без set mvol, а с просто %mvol%

или зарегистрируйтесь чтобы ответить!