![]() |
Переименование. Заменить часть символов в имени файла.
Здравствуйте.
В директории есть файлы .xls, имена которых заканчиваются на "_21" Помогите пожалуйста их переименовать на "_2021" Также прошу помощи, как в заданной директории у файлов, у которых в имени встречается символ "." заменить на символ "_" Заранее Спасибо! |
epoddubniy, Вам обязательна на пакетных файлах реализация? Powershell не подойдёт?
|
да я вообще не понимаю ТС, он уже создавал тему в которой присутствовал момент переименования и был показан в коде, только создать новую тему не лень. а зайти в свою предыдущую лень - абсурд.
|
вот прямолинейный (и даже нет, я из предыдущей темы ТС знаю что 21 и 2021 это год, а не просто цифры, поэтому и в этой теме условие задачи неполное или неверное) подход:
Код:
$a = @( --- и я смотрю мы тут ему уже не раз что-то переименовывали. Может проще вскрыть карты и описать задачу целиком, только по человечески, а не как раньше: Происходит это потом это ... Задача ставится так --- Директория такая-то - есть, создана С сервера или откуда там приходят файлы в такую-то директорию с такой-то интенсивностью с такой-то маской Запуск (соответственно проверка наличия файлов) кода будет производится (возможно из планировщика) вручную раз в месяц (неделю) Надо отобрать по маске или по дате файлы все или по столько-то штук из общей папки и разложить в другие папки (если их нет, то создать, имена папок должны содержать часть имени файла и дату из имени файла или свойства файла) |
Цитата:
Код:
@Echo Off Код:
@Echo Off Цитата:
Код:
@Echo Off Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Код:
Код:
Do ( Код:
echo %%f megaloman, скажите пожалуйста, правильно ли я понял кусок кода? Код:
For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%BoxIn%\*%Find%"`) Do ( 2) Dir /B /A:-D "%BoxIn%\*%Find%" - получаем список имен файлов в целевой директории, у которых имя имеет маску "*_21" 3) Set "Name=%%~nxf" - у каждого файла оставляем только имя и расширение, путь отбрасывается 4) Call Ren - вызываем команду Rename 5) Call Ren "%BoxIn%\%%f" - осуществляем переименование в каталоге BoxIn файлов %%F, а так как в переменной цикла %%F сохранено значение имен файлов с маской "*_21", то они по очереди будут подставляться 6) %%Name:%Find%=%Repl%%% - вот это - не понял :-( Понимаю, что синтаксис команды rename подразумевает переименование того, что было "%BoxIn%\%%f" на то, что будет %%Name:%Find%=%Repl%%%, но то, как это получается - не понятно почему у %%Name двойной знак процента, как у переменной цикла, почему потом стоит двоеточие (что это за синтаксис и для чего он используется) равенство в выражении означает, что присваивается значение %repl%, ну то есть, если я правильно понимаю, каждый %find% меняется на %repl% а для чего после %repl% стоят двойные знаки процента? Заменил Код:
For /f "usebackq delims=" %%f In (`2^>nul Dir /B /A:-D "%BoxIn%\*%Find%"`) Код:
For /f "tokens=*" %%f In ('Dir /B /A:-H "%BoxIn%\*%Find%"') Цитата:
|
epoddubniy, Давайте договариваться: Вы берёте мой код, сохраняете его в текстовый файл с расширением .bat в 866 кодировке и запускаете его на выполнение. Потом по факту рассказываете, что работает, а что брыкается.
Я еще раз проверил исполнение моих кодов - работают. Разъяснение кода (опять же - все коды примеров сохраняем в файл с расширением .bat и запускаем на выполнение)
Dir /B /A:-D "%BoxIn%\*%Find%" - получаем список имен файлов в целевой директории, у которых имя имеет маску "*_21.xls" Обсудим поведение переменных в цикле (извините, если излагаю известное). Для отладки, вот код: Код:
@Echo Off Echo %Name%===="%%~nxf" выдаёт значение %Name% определённое до цикла, а после цикла Echo %Name% выдаст последнее значение, присвоенное %Name% в цикле. Такие реалии раскрытия переменной в цикле. Чтобы раскрытие переменной работало корректно, применим вместо Проделайте и убедитесь, что работает ожидаемо. То есть, Name заключили с двух сторон в двойные %% и вызвали команду через Call Альтернатива
Код:
@Echo Off Аналогичная история с Ren. Но тут еще надо почитать хелп к Set /? Цитата:
str1 это %Find%, str2 это %Repl% То есть в имени файла подстроку _21.xls заменим на _2021.xls, чего Вы и домогались. |
Цитата:
|
Время: 07:41. |
Время: 07:41.
© OSzone.net 2001-