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

Показать сообщение отдельно

Ветеран


Contributor


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

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


Цитата ChimMAG:
CMD очень не любит имена файлов со всякими !, скобками и прочими символами. Почему так или как-то можно отследить это? »
Надо правильно их употреблять. Потому что Вы используете EnableDelayedExpansion, что предполагает наличие переменных в !!. Соответственно, при обработке строк то, что встречается в !! интерпретируется как переменная с непредсказуемыми последствиями. Выкручивайтесь как-нибудь без EnableDelayedExpansion - уверяю, это возможно. Изложите, чего Вы домогаетесь, можно тогда советовать конкретнее: по обрывкам кода без четкой постановки трудновато, конструкция
(set TKatD="%%a"&if "%%a"==!TKatD! (call :ObrabKat))
меня угнетает, я её не понимаю. Как возможный приём (не решение, только как пример):
Код: Выделить весь код
@Echo Off
cls
	Set "TKatD=!!!MS-DOS-ver.5-7 (ms-dos.biz)!!!"
	For /R %%d In (.) Do Echo %%d |>nul 2>&1 FindStr /I "\%TKatD%\" &&Call :ObrabKat "%%d"
Pause
Exit /B

:ObrabKat
	Echo %1
	Dir %1 /s /b /A:-D
Exit /B
Код: Выделить весь код
@Echo Off
cls
	For /R %%d In (.) Do (
		Set "TKatD=%%d" 
		Call Echo "%%TKatD%%"
		Call :ObrabKat "%%d" "%%TKatD%%"
	)
Pause
Exit /B

:ObrabKat
	If %1==%2 Echo Ура!  %1  %2 
Exit /B
Помимо этого, если в имени файла встречается символ не из 866 кодовой страницы, иногда помогает при этом chcp 1251. Надо конкретика задачи.

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


Последний раз редактировалось megaloman, 17-11-2021 в 17:10.


Отправлено: 16:24, 17-11-2021 | #2