[Цитировать]

    wadimus
  • 14910
  • Стаж: 7 лет 4 месяца
  • Сообщений: 762
  • Репутация:91

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

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

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

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1264
  • Репутация:127

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

[Цитировать]

    wadimus
  • 14910
  • Стаж: 7 лет 4 месяца
  • Сообщений: 762
  • Репутация:91

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

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
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 написать, если надо.

[Цитировать]

    wadimus
  • 14910
  • Стаж: 7 лет 4 месяца
  • Сообщений: 762
  • Репутация:91

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

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

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

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1264
  • Репутация:127

    [+] [-]
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=^>^>)

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
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

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1264
  • Репутация:127

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

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

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

[Цитировать]

    AZJIO
  • 17953
  • Стаж: 6 лет 1 месяц
  • Сообщений: 1264
  • Репутация:127

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

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
Возможно, вот так надо:
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!"
При запуске из ком.строки переменные цикла надо писать с одной %

[Цитировать]

    cartmenezz
  • 1384
  • Стаж: 8 лет 6 месяцев
  • Сообщений: 526
  • Репутация:14

    [+] [-]
  • Откуда: Калининград
Вот тут спрашивал про появление дополнительных переменных при использовании команды 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 поменялся? интересно...

[Цитировать]

    Ander_73
  • 15549
  • Стаж: 7 лет 1 месяц
  • Сообщений: 3586
  • Репутация:127

    [+] [-]
Столкнулся с интересным.
Код:
setlocal EnableDelayedExpansion
set out=1
echo;!out:~0,-1!
даёт верный результат.
Если же в качестве экранирующих символов в команде echo использовать . или / или \, получается не так радужно, как хотелось бы...

Страница 30 из 89


Показать сообщения:    

Текущее время: 29-Мар 00:53

Часовой пояс: UTC + 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы можете скачивать файлы