|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование с условием bat |
|
CMD/BAT - [решено] Переименование с условием bat
|
Новый участник Сообщения: 10 |
Подскажите возможно ли реализовать следующий скрипт на bat/cmd???
Есть файл вида номер_годмесяцдень (00000001_20170712.pdf) а его нужно переименовать в номер_день.месяц.год (00000001_12.07.2017.pdf) |
|
Отправлено: 22:40, 12-07-2017 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать alado, на всякий случай: знак подчёркивания, как я понял, обязательно есть — причём единственный?
|
------- Отправлено: 22:47, 12-07-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать я бы попробовал объяснить заказчику, что это плохая идея - что точки в имени файла, что национальный формат даты, что порядок номера и даты
|
Отправлено: 23:58, 12-07-2017 | #3 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать Busla, угу, в идеале — ГодМесяцДень_НомерФайла.pdf
Но это понимание обычно приходит с опытом, после того как намучаешься с "интуитивно понятными" вариантами. А пока сам не прочувствовал — убедить начальство или заказчика, задавшего такие требования, нереально. |
------- Отправлено: 01:35, 13-07-2017 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Скрытый текст
@echo off setlocal enableextensions enabledelayedexpansion set sSourceFilePath=%~1 set sSourceFileName=%~nx1 if defined sSourceFilePath ( if exist "%sSourceFilePath%" ( set sLastPart=%sSourceFileName:*_=% call set sFirstPart=%%sSourceFileName:!sLastPart!=%% set sYear=!sLastPart:~0,4! set sMonth=!sLastPart:~4,2! set sDay=!sLastPart:~6,2! set sExt=!sLastPart:~8! set sNewFileName=!sFirstPart!!sDay!.!sMonth!.!sYear!!sExt! echo Rename [%sSourceFilePath%] into [!sNewFileName!] ren "%sSourceFilePath%" "!sNewFileName!" ) else ( echo Can't find source file [%sSourceFilePath%]. exit /b 2 ) ) else ( echo Usage: %~0 ^<Source file^> exit /b 1 ) endlocal exit /b 0 Путь к целевому файлу указывается параметром пакетного файла. Также можно просто перетащить целевой файл на пакетный файл в Проводнике. |
|
Отправлено: 03:59, 13-07-2017 | #5 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать Цитата Busla:
А перед тем, как переименовывать, я бы проанализировал имя файла, чтобы не исказить имя файла не соответствуещее критерию
@Echo Off Call :RenMask "%~1" GoTo :Eof :RenMask If "%~1"=="" Echo No arguments for CMD-file "%~dpnx0"& GoTo :Eof If Not Exist "%~1" Echo File "%~1" Not Found& GoTo :Eof Set "FMask=[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_20[0-9][0-9][0-1][0-9][0-3][0-9]\.pdf" Set "FName=%~nx1" Set "NewName=%FName:~0,9%%FName:~15,2%.%FName:~13,2%.%FName:~9,4%%FName:~17,4%" Echo %FName%| Findstr.exe /R /B /I "%FMask%" >nul&& Ren "%~1" "%NewName%"|| Echo File name "%~1" incorrect GoTo :Eof Если протелепатить, то, скорее всего, имеется папка с кучей подобных файлов, которые надо переименовать по капризу заказчика.
@Echo Off cls Set "FileIn=Z:\Box_In\Тра ля ля\????????_20??????.pdf" FOR %%f IN ("%FileIn%") DO Call :RenMask "%%~f" pause GoTo :Eof :RenMask If "%~1"=="" Echo No arguments for CMD-file "%~dpnx0"& GoTo :Eof If Not Exist "%~1" Echo File "%~1" Not Found& GoTo :Eof Set "FMask=[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]_20[0-9][0-9][0-1][0-9][0-3][0-9]\.pdf" Set "FName=%~nx1" Set "NewName=%FName:~0,9%%FName:~15,2%.%FName:~13,2%.%FName:~9,4%%FName:~17,4%" Echo %FName%| Findstr.exe /R /B /I "%FMask%" >nul&& Ren "%~1" "%NewName%"|| Echo File name "%~1" incorrect GoTo :Eof ![]() |
|
------- Последний раз редактировалось megaloman, 13-07-2017 в 13:12. Отправлено: 13:05, 13-07-2017 | #6 |
Ушел из жизни Сообщения: 8595
|
Профиль | Сайт | Отправить PM | Цитировать Цитата megaloman:
![]() Но за сутки вопрошающий ни разу не появился, и даже на уточняющий вопрос не ответил. |
|
------- Отправлено: 23:18, 13-07-2017 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата mwz:
![]() |
|
Отправлено: 23:37, 13-07-2017 | #8 |
Новый участник Сообщения: 10
|
Профиль | Сайт | Отправить PM | Цитировать Iska, спасибо, опробовал. Все работает!
megaloman, но Ваше решение оказалось тем самым. Согласен что не полностью дал понять что требуется, но скажу одно ВЫРУЧИЛИ! |
Отправлено: 19:27, 14-07-2017 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - BAT.Переименование файла | alex1985khv | Скриптовые языки администрирования Windows | 8 | 28-03-2016 08:12 | |
CMD/BAT - [решено] Переименование по заданной маске bat | Boiston | Скриптовые языки администрирования Windows | 3 | 18-03-2015 01:15 | |
CMD/BAT - BAT поиск текста в файле с условием | rosalin | Скриптовые языки администрирования Windows | 10 | 05-05-2014 14:56 | |
CMD/BAT - Определить издание Windows с условием. (cmd\bat) | PavelVolia86 | Скриптовые языки администрирования Windows | 6 | 13-04-2014 09:57 | |
CMD/BAT - [решено] .bat Копирование с условием | TwoThrones | Скриптовые языки администрирования Windows | 1 | 09-01-2011 14:51 |
|