wadimus
- Стаж: 8 лет
- Сообщений: 749
- Репутация: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") .. ничем :)
|
wadimus
- Стаж: 8 лет
- Сообщений: 749
- Репутация:91[+] [-]
|
AZJIO, а как ты определяешь какие диски в системе? вот я в ком-строке набрал такое:wmic logicaldisk get deviceid,freespace,size,volumeserialnumber тут и список дисков и свободное место и сериальный номер дисков и полный размер диск по subst-у тоже зацепился, зарраза :) ЗЫ. а так:wmic logicaldisk where drivetype=2 get deviceid,freespace,size,volumeserialnumber получу список только USB-дисков
|
wadimus
- Стаж: 8 лет
- Сообщений: 749
- Репутация:91[+] [-]
|
Ander_73, потом ему надо будет диски по каждой букве разделять .. проще список через пробел делать:dir %%i: >nul 2>&1&& set "diskset=!diskset!%%i "
|
Ander_73
- Стаж: 7 лет 9 месяцев
- Сообщений: 3821
- Репутация:127[+] [-]
|
wadimus, как ему потом парсить список дисков на PureBasic, он решит сам
|
Отправлено: 21-Июн-2020 18:38
(спустя 1 час 24 минуты)
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация: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=^>^>)
|
Отправлено: 21-Июн-2020 20:59
(спустя 2 часа 20 минут)
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Ander_73, вчера попробовал, не удалось получить
|
AZJIO
- Стаж: 6 лет 9 месяцев
- Сообщений: 1322
- Репутация:127[+] [-]
|
Ander_73, из окна "Выполнить"? Win+R... паузу не удалось вставить, из пурика (без паузы) возвращает пустая строка, другие команды выводит. Потестировать ещё смогу только вечером.
|
Ander_73
- Стаж: 7 лет 9 месяцев
- Сообщений: 3821
- Репутация: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
- Стаж: 9 лет 2 месяца
- Сообщений: 527
- Репутация: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
- Стаж: 7 лет 9 месяцев
- Сообщений: 3821
- Репутация:127[+] [-]
|
Столкнулся с интересным. Код:setlocal EnableDelayedExpansion set out=1 echo;!out:~0,-1! даёт верный результат. Если же в качестве экранирующих символов в команде echo использовать . или / или \, получается не так радужно, как хотелось бы...
|
Страница 30 из 94
Текущее время: 26-Ноя 08:55
Часовой пояс: UTC + 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете прикреплять файлы к сообщениям Вы можете скачивать файлы
|
|