![]() |
Определение и работа с некорректными именами файлов
CMD очень не любит имена файлов со всякими !, скобками и прочими символами. Но если попадаются такие - хотелось бы их если не обрабатывать, то хотя бы сообщать скрипту об этом. По конкретике:
Код:
for /R %%a in (.) do (set TKatD="%%a"&if "%%a"==!TKatD! (call :ObrabKat)) Код:
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 ) ) Далее мне надо войти в данный каталог и уже в нём прошустрить файлы. И, само собой, команда Код:
cd %TKatD% P.S. Уже на моменте написания я нашёл частичное решение - сравнение нашей переменной и текущего каталога Код:
if not %TKat%=="%CD%\" (exit /b) |
Цитата:
(set TKatD="%%a"&if "%%a"==!TKatD! (call :ObrabKat)) меня угнетает, я её не понимаю. Как возможный приём (не решение, только как пример): Код:
@Echo Off Код:
@Echo Off |
Цитата:
С EnableDelayedExpansion - наверное действительно в данном конкретном случае поможет, завтра поэсперементирую. А как быть в случае наличия в имени файла скобки ( ? Скрипт не завершится с ошибкой? |
ChimMAG, лучше вообще не использовать языки подобные CMD и PowerShell, если есть сложная обработка имён.
|
Код:
можно так(только в цикле учитывать что появится доп."слэш" в конце и убирать его): Код:
@echo on Код:
for /R %a in (\) do (echo %a ) |
Цитата:
Код:
for /R %a in (\) do (set X=%%a&call :Obrab ) Цитата:
|
В Powershell есть параметр -LiteralPath, помогает в таких случаях.
|
ChimMAG, В вашем примере переменная %X% внутри цикла, хоть Вы ее хотите использовать в процедуре. Поэтому, если аккуратно, то вот так разными способами и ничего не обрезается и не ломается.
Код:
@Echo Off Фрагмент результата у меня.
=====
00000 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Soft_Out\. 11111 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Soft_Out\. 33333 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Soft_Out\. 44444 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Soft_Out\. 55555 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Soft_Out\. 66666 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Soft_Out\. ===== 00000 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Я-Архив\. 11111 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Я-Архив\. 33333 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Я-Архив\. 44444 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Я-Архив\. 55555 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Я-Архив\. 66666 Z:\Users\1\Temp\MS-DOS_Flash\!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!\Я-Архив\. |
ChimMAG, ну вот же
Скрытый текст
Код:
C:\Activators Полностью скрипт: Скрытый текст
Код:
|
Цитата:
Вообще скрипт пробегает по всему дереву, начиная с каталога запуска и считает полную длину файлов вместе с путём и выявляет имена с более 255 символами - с такими файлами бывают проблемы. Я подправил, запустил. Отработал за несколько часов более 300 тыс файлов (по моим прикидкам по тому, что он пробегал; я думал, что гораздо медленнее будет, в реальности скорее всего за 500тыс успел) и отрубился. Добавил вывод в отдельный файл трассировку пробегаемых каталогов и счётчик просмотренного. Посмотрю что из этого получится :-) |
Цитата:
|
Iska, ну что вы) Posh еще не до конца изучен. Как-то слишком быстро работают на нем скрипты.
Даже если posh помог вам решить задачу, при следующей потребности опять придется писать скрипт. А еще, вон, у меня друг есть, который до сих пор ни разу не пользовался пошем, и нормально же живет. |
Fors1k, я имею в виду, что «голые» native командлеты, даже с учётом прокладки в виде .Net Framework, могут исполняться достаточно быстро. Но как только дело доходит до: обработки строк, выделения памяти, сборки мусора, не говоря уже про циклы и т.п. — PoSH становится весьма нетороплив, как и любой другой интерпретируемый язык. Чистый C с ассемблерными вставками в критических местах остаётся самым шустрым вариантом (из приемлемых по скорости программирования) для написания «фильтров» (что-то подали на вход — что-то получили на выходе).
|
ChimMAG, Когда-то вычитал заповедь: не перепрограммируй функцию квадратного корня. Неужели нельзя найти что-то профессиональное готовое для сбора какой-то статистики?
|
Iska, я, так сказать, частично не про пош говорил :wink:
|
Время: 12:21. |
Время: 12:21.
© OSzone.net 2001-