Вопрос чайника 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. (1) опередил

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

    считать:

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

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

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

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

    Сделал так:

    for /f %%a in ('mountvol d: /l') do mountvol c:\d %%a
  8. (4) так работает в cmd обработка строк.

  9. в гугл клауде вроде можно export пользовать
    но я не настоящий электрик

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

  11. Или на wsl?

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

    mountvol | wsl grep "\\\\"

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

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

    Ответы: (14)
  14. гуглитсяпо слову cygwin

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

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

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

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

  17. IMG_20220127_174205.jpg

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

    Ответы: (17)
  18. Курильщик IMG_20220127_174205.jpg

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

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

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

  20. с гитом идет и sed и awk и grep

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

    Под виндой?

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

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

    Ответы: (23)
  23. 27.01.2022 18:02:48 отредактировано Курильщик

    (20) в папке git/mingw64/bin
    git/usr/bin/

    Ответы: (24) (26)
  24. (21) cygwin не утилита а пакет/сборка

  25. Курильщик (20) в папке git/mingw64/bin

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

    Ответы: (25) (28)
  26. (24) git/usr/bin

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

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

    -image-

    Ответы: (29) (30) (31)
  28. mingw это кусок cygwin, сейчас развивается самостоятельно

  29. Курильщик (24) git/usr/bin

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

  30. (26) где у тебя git лежит?

    Ответы: (31)
  31. (26) путь до use/bin не прописан в переменной среды path

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

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

    C:\Program Files\Git\bin

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

    bash, git, sh

  33. глянь что лежит в C:\Program Files\Git\usr\bin

    но есть вероятность что ты галку с установкой утилит не нажал, но по идее они по умолчанию ставятся.

    Ответы: (33)
  34. Курильщик глянь что лежит в C:\Program Files\Git\usr\bin

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

    Ответы: (34) (35) (36) (37)
  35. 27.01.2022 18:13:59 отредактировано Курильщик

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

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

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

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

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

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

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

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

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

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

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

  42. например так

  43. mountvol.exe d: /L | cut -f2 -d '{' | cut -f1 -d '}'>%temp%\mvol.$$$

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

    echo volume is: %mvol%

    Ответы: (44)
  44. но тут используется временный файл

  45. Курильщик 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)
  46. Точнее, понятно почему так. Потому что %mvol% рассчитывается еще до начала выполнения команды, когда она еще не определена.
    Как сделать чтобы она рассчитывалась на этапе выполнения, чтобы можно было подставить в другую команду, в той же строке?

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

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

  48. ну ок.

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