[Quote]

    wadimus
  • 14910
  • Longevity: 3 years 7 months
  • Posts: 196
  • REPUTATION:19

    [+] [-]
Ander_73,
в случае:
for /f "tokens=*" %%a in ("Desktop    REG_SZ    C:\Users\Вася Иванович Петров\Desktop") ..
и
for /f "delims=" %%a in ("Desktop    REG_SZ    C:\Users\Вася Иванович Петров\Desktop") ..
ничем :)

[Quote]

    Ander_73
  • 15549
  • Longevity: 3 years 5 months
  • Posts: 1656
  • REPUTATION:104

    [+] [-]
786011й вариант отрежет только разделитель в начале строки (если он там есть)
Молодчина! ay
---
Ну, не надо так общо "разделитель". В нашем случае это вполне конкретно: отрежутся таб-ы и пробелы в начале строки.

[Quote]

    AZJIO
  • 17953
  • Longevity: 2 years 4 months
  • Posts: 418
  • REPUTATION:56

    [+] [-]
Можно ли из строки ABCDEF запустить цикл опроса с командой dir Х: /AL, чтобы вывести результат, который можно парсить, например A0B0C1D1E0F0. Или просто сократить данные на выводе, но сплошным текстом, чтобы всё диски в один вывод и парсить результаты. Интересует выявить картридер без диска.

[Quote]

    wadimus
  • 14910
  • Longevity: 3 years 7 months
  • Posts: 196
  • REPUTATION:19

    [+] [-]
AZJIO, а как ты определяешь какие диски в системе?
вот я в ком-строке набрал такое:
wmic logicaldisk get deviceid,freespace,size,volumeserialnumber
тут и список дисков и свободное место и сериальный номер дисков и полный размер
диск по subst-у тоже зацепился, зарраза :)
ЗЫ. а так:
wmic logicaldisk where drivetype=2 get deviceid,freespace,size,volumeserialnumber
получу список только USB-дисков

[Quote]

    Ander_73
  • 15549
  • Longevity: 3 years 5 months
  • Posts: 1656
  • REPUTATION:104

    [+] [-]
AZJIO, aa
Если речь идёт о классике, то примерно так:
setlocal EnableDelayedExpansion
set "diskset="
for %%i in (c d e ... y z) do ^
dir %%i: >nul 2>&1&& set diskset=!diskset!%%i
Троеточие заменить на все буквы латинского алфавита.
На выходе в переменной %diskset% имеем все диски, которые "отзываются". Например: cdemz
---
Могу без setlocal написать, если надо.

[Quote]

    wadimus
  • 14910
  • Longevity: 3 years 7 months
  • Posts: 196
  • REPUTATION:19

    [+] [-]
Ander_73, потом ему надо будет диски по каждой букве разделять .. проще список через пробел делать:
dir %%i: >nul 2>&1&& set "diskset=!diskset!%%i "

[Quote]

    Ander_73
  • 15549
  • Longevity: 3 years 5 months
  • Posts: 1656
  • REPUTATION:104

    [+] [-]
wadimus, как ему потом парсить список дисков на PureBasic, он решит сам ae

[Quote]

    AZJIO
  • 17953
  • Longevity: 2 years 4 months
  • Posts: 418
  • REPUTATION:56

    [+] [-]
wadimus, диски я получаю используя GetLogicalDrives и могу на вход дать буквы дисков хоть слитно, хоть через пробел. Парсить не обязательно через пробел, с тем же успехом я просто присвою набор слитных букв массиву и получу массив букв, который легко перебрать в цикле. Просто GetLogicalDrives не проверяет диски, просто даёт маску 001100 подключенных дисков имеющих буквы в проводнике, а команда dir Х: /AL как я ожидаю исключит картридеры, остальные виртуальные и прочая некондиция будет отброшена другим способом. Можно попробовать исключить обращение к картридерам функцией которая не выдаст мессагу-ошибку
Добавлено через 1 час 24 минуты 1 секунда:
Что-то конвертирование в рабочую строку не получается, окно закрывается мгновенно. И в PureBasic не могу получить вывод возможно из-за этого, другие команды работают.
@Echo off
setlocal EnableDelayedExpansion
set "diskset="
for %%i in (c d e f j h i j k l m n o p q r s t u v w x y z) do ^
dir %%i: >nul 2>&1&& set diskset=!diskset!%%i
cls
@Echo.%diskset%
set /p Ok=^>^>
:: cmd.exe /c (@Echo off & setlocal EnableDelayedExpansion & set "diskset=" & for %%i in (c d e f j h i j k l m n o p q r s t u v w x y z) do ^ & dir %%i: >nul 2>^&1^&^& set diskset=!diskset!%%i & cls & @Echo.%diskset%& set /p Ok=^>^>)

[Quote]

    Ander_73
  • 15549
  • Longevity: 3 years 5 months
  • Posts: 1656
  • REPUTATION:104

    [+] [-]
AZJIO,
cmd.exe /v:on /c "@Echo off & (for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do dir %%i: >nul 2>&1&& set diskset=!diskset!%%i) & echo !diskset:~9!"
Полная лажа, но работает af

[Quote]

    AZJIO
  • 17953
  • Longevity: 2 years 4 months
  • Posts: 418
  • REPUTATION:56

    [+] [-]
Ander_73, вчера попробовал, не удалось получить

[Quote]

    Ander_73
  • 15549
  • Longevity: 3 years 5 months
  • Posts: 1656
  • REPUTATION:104

    [+] [-]
AZJIO, проверил на вин7, 8.1, 10
Выводит на экран строку типа: cdefh из дисков, которые "отвечают".
Не знаю, чем помочь.

[Quote]

    AZJIO
  • 17953
  • Longevity: 2 years 4 months
  • Posts: 418
  • REPUTATION:56

    [+] [-]
Ander_73, из окна "Выполнить"? Win+R... паузу не удалось вставить, из пурика (без паузы) возвращает пустая строка, другие команды выводит. Потестировать ещё смогу только вечером.

[Quote]

    Ander_73
  • 15549
  • Longevity: 3 years 5 months
  • Posts: 1656
  • REPUTATION:104

    [+] [-]
Возможно, вот так надо:
cmd.exe /v:on /c "@echo off & (for %i in (c d e f g h i j k l m n o p q r s t u v w x y z) do dir %i: >nul 2>&1&& set diskset=!diskset!%i) & echo !diskset:~9!"
При запуске из ком.строки переменные цикла надо писать с одной %

[Quote]

    cartmenezz
  • 1384
  • Longevity: 4 years 10 months
  • Posts: 218
  • REPUTATION:5

    [+] [-]
Вот тут спрашивал про появление дополнительных переменных при использовании команды FOR /F (Вопрос 4). В голове был полный сумбур, потому что в справке (for /?) написано:
1) По умолчанию ключ /F выделяет из каждой строки каждого файла первую отделенную пробелами подстроку...
2) "tokens=" - При использовании этого ключа выделяются дополнительные имена переменных...

НО, в В этой статье (cyberforum) есть такой пример:
FOR /F %%a in ("Каждое слово в отдельную переменную") DO echo a=%%a; b=%%b; c=%%c; d=%%d; e=%%e
который, без использования ключа tokens=, выдает такой результат:
a=Каждое; b=слово; c=в; d=отдельную; e=переменную
* кстати, в той же статье есть такой комментарий:
Обратите внимание: по умолчанию, цикл выдаёт в результатах только 1-ый токен. Если вам нужно, получить другой, нужно явно указывать модификатор "tokens=xxx"
.....
Собственно, все это меня и запутало, а сегодня подумал - дай ка я попробую этот пример - а он и не работает))
Без использования ключа "tokens=1-5", вывод команды такой:
a=Каждое; b=%b; c=%c; d=%d; e=%e
И теперь, вроде как всё встало на свои места. Но, вроде серьезный форум, и статья наверняка неоднократно проверялась, да и читали ее по-любому не раз, странно что там так долго мог висеть такой косяк. Я там уже задал это вопрос.. Может, начиная с какой-то версии винды, механизм работы команды for поменялся? интересно...

Page 30 of 30


Display posts:    

Current time is: 07-Jul 11:40

All times are UTC + 3


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum