Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Определение и работа с некорректными именами файлов

Ответить
Настройки темы
CMD/BAT - Определение и работа с некорректными именами файлов

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: ChimMAG
Дата: 17-11-2021
Описание: -
CMD очень не любит имена файлов со всякими !, скобками и прочими символами. Но если попадаются такие - хотелось бы их если не обрабатывать, то хотя бы сообщать скрипту об этом. По конкретике:
Код: Выделить весь код
for /R %%a in (.) do (set TKatD="%%a"&if "%%a"==!TKatD! (call :ObrabKat))
exit /b

:ObrabKat
echo %TKatD%
set TKat=%TKatD%
exit /b
Что имеем в трассировке:
Код: Выделить весь код
C:\Users\1\Temp\MS-DOS_Flash>(set TKatD="C:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\."  & if "C:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\." == !TKatD! (call :ObrabKat ) ) 

C:\Users\1\Temp\MS-DOS_Flash>echo "C:\Users\1\Temp\MS-DOS_Flash\\." 
"C:\Users\1\Temp\MS-DOS_Flash\\."

C:\Users\1\Temp\MS-DOS_Flash>set TKat="C:\Users\1\Temp\MS-DOS_Flash\\."
Поясняю: команда FOR нормально обрабатывает косячное имя файла, переменная %%a имеет именно это имя. Более того, так как корректно обрабатывается условный переход, то и !TKatD! тоже равен %%a (собственно этот условный переход и был на такой случай расчитан). Но после того, как переходим и просто сразу выводим значение %TKatD% - в нём обрезаются !!! и всё, что между ними. Почему так или как-то можно отследить это?

Далее мне надо войти в данный каталог и уже в нём прошустрить файлы. И, само собой, команда
Код: Выделить весь код
cd %TKatD%
не обрабатывается корректно. Тут попытался выйти из положения втавив туда, где имя каталога ещё полное - (cd %%a) - трассировка пишет, что подставляется в строку вроде то, но нет, не срабатывает такой фокус, не заходит.

P.S. Уже на моменте написания я нашёл частичное решение - сравнение нашей переменной и текущего каталога
Код: Выделить весь код
if not %TKat%=="%CD%\" (exit /b)
- в этом случае хотя бы пропускается косячные. Но всё равно общий вопрос - почему так происходит остаётся открытым.

Отправлено: 15:25, 17-11-2021

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата ChimMAG:
Отработал за несколько часов более 300 тыс файлов (по моим прикидкам по тому, что он пробегал; я думал, что гораздо медленнее будет, в реальности скорее всего за 500тыс успел) и отрубился. »
Это как-то совсем несерьёзно. WSH/PoSH, а лучше какой-нибудь чистый C.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:02, 18-11-2021 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Iska, ну что вы) Posh еще не до конца изучен. Как-то слишком быстро работают на нем скрипты.
Даже если posh помог вам решить задачу, при следующей потребности опять придется писать скрипт.
А еще, вон, у меня друг есть, который до сих пор ни разу не пользовался пошем, и нормально же живет.

Отправлено: 23:35, 18-11-2021 | #12


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Fors1k, я имею в виду, что «голые» native командлеты, даже с учётом прокладки в виде .Net Framework, могут исполняться достаточно быстро. Но как только дело доходит до: обработки строк, выделения памяти, сборки мусора, не говоря уже про циклы и т.п. — PoSH становится весьма нетороплив, как и любой другой интерпретируемый язык. Чистый C с ассемблерными вставками в критических местах остаётся самым шустрым вариантом (из приемлемых по скорости программирования) для написания «фильтров» (что-то подали на вход — что-то получили на выходе).

Отправлено: 23:14, 19-11-2021 | #13


Ветеран


Contributor


Сообщения: 2708
Благодарности: 1684

Профиль | Отправить PM | Цитировать


ChimMAG, Когда-то вычитал заповедь: не перепрограммируй функцию квадратного корня. Неужели нельзя найти что-то профессиональное готовое для сбора какой-то статистики?

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 00:25, 20-11-2021 | #14


Аватара для Fors1k

Старожил


Сообщения: 193
Благодарности: 112

Профиль | Отправить PM | Цитировать


Iska, я, так сказать, частично не про пош говорил

Отправлено: 01:41, 20-11-2021 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Определение и работа с некорректными именами файлов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Операция с именами файлов rider42 Скриптовые языки администрирования Windows 26 08-12-2018 21:20
CMD/BAT - Перемещение файлов в папки с аналогичными именами londondron Скриптовые языки администрирования Windows 12 22-03-2017 15:22
CMD/BAT - Создание папок и файлов со с случайными именами. Kirstem Скриптовые языки администрирования Windows 0 26-04-2015 20:06
CMD/BAT - работа с 2 текстовыми файлами, именами файлов и всё в цикле Тишина Скриптовые языки администрирования Windows 4 15-07-2012 20:26
Проблема с русскими именами файлов iml Общий по Linux 7 25-09-2006 12:40




 
Переход