PDA

Показать полную графическую версию : [решено] Как убрать из названий файлов и папок восклицательный знак?


Oleg48
05-08-2010, 02:08
Проблема такая, есть папка(-и) в названии которой(-ых) присутствует восклицательный знак, в этих(-ой) папке (-ах) естественно находятся файлы в названиях которых присуствует восклицательный знак. Хотелось как-нибудь разрулить эту тему т.е. После работы скрипта восклицательный знак должен отсуствовать как в названиях папок также и в названиях файлов которые храняться в этих папках, кстати до работы скрипта в папках храняться файлы в названии которых есть восклицательный знак и файлы название которых неподпорченно этим знаком (!).
Не знаю как подступится к этому скрипту, однако знаю что восклицательный знак можно экранировать, толи так ^!^ , толи так ^! . Подскажите в каком направлении двигать мысль, или скрипт подкинте, буду очень благодарен!!!

El Sanchez
05-08-2010, 13:48
Oleg48,

@Echo Off
Set Source=C:\Source!

Set RenameSource=%Source:!=%
For /F "Tokens=*" %%A In ("%RenameSource%") Do Ren "%Source%" "%%~nA" 2>nul&&^
For /F "Tokens=*" %%A In ('Dir /B /A-D "%RenameSource%"') Do Call :Func "%%A"
GoTo :EOF

:Func
Set FileName=%~1
Set FileName=%FileName:!=%
Ren "%RenameSource%\%~1" "%FileName%" 2>nul

Oleg48
05-08-2010, 14:32
El Sanchez, спасибо за такое быстрое решение, к этому принципу я тоже подгребал - Set RenameSource=%Source:!=% Остальные строки мне очень интересны, есть куда рости. Только некоторые вещи недопонял : %%~nA и вот эти выводы 2>nul&&^ и 2>nul . Если не влом подскажите простым языком, пожалуйста непеняйте на help. А так полный респект и уважуха за ответ ;)

p.s. Я заметил что Вы любите использовать в своих скриптах For /F , надо будет тоже попробывать.

deepred
05-08-2010, 14:45
Oleg48,

Только некоторые вещи недопонял : %%~nA и вот эти выводы 2>nul&&^ и 2>nul »

%%~nA - синтаксическая конструкция, позволяет из переменной %%А (представляющей собой имя файла с полным путем к нему) выделить только само имя, без расширения. Все конструкция можно посмотреть cmd>For /?

2>nul - "2" дескриптор ошибки отработки команды, в данном случае перенапрявляется в nul, т.е. в никуда

&& - символ условной обработки, разрешает запуск команды, стоящую за собой, только если команда, стоящая перед ним была выполнена успешно (противоположность ||)




© OSzone.net 2001-2012