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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование с условием bat

Ответить
Настройки темы
CMD/BAT - [решено] Переименование с условием bat

Аватара для alado

Новый участник


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


Конфигурация

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


Подскажите возможно ли реализовать следующий скрипт на bat/cmd???

Есть файл вида номер_годмесяцдень (00000001_20170712.pdf) а его нужно переименовать в номер_день.месяц.год (00000001_12.07.2017.pdf)

Отправлено: 22:40, 12-07-2017

 
mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


alado, на всякий случай: знак подчёркивания, как я понял, обязательно есть — причём единственный?

-------
Mikhail Zhilin


Отправлено: 22:47, 12-07-2017 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


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

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


я бы попробовал объяснить заказчику, что это плохая идея - что точки в имени файла, что национальный формат даты, что порядок номера и даты
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:58, 12-07-2017 | #3

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Busla, угу, в идеале — ГодМесяцДень_НомерФайла.pdf
Но это понимание обычно приходит с опытом, после того как намучаешься с "интуитивно понятными" вариантами. А пока сам не прочувствовал — убедить начальство или заказчика, задавшего такие требования, нереально.

-------
Mikhail Zhilin

Это сообщение посчитали полезным следующие участники:

Отправлено: 01:35, 13-07-2017 | #4


Ветеран


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

Профиль | Отправить 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


Ветеран


Contributor


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

Профиль | Отправить 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
Маска файлов с путём к папке указывается явно в скрипте в переменной FileIn. Можно, конечно, сделать так, чтобы работало при перетаскивании имени папки на батник, но я не сделал, посчитал, что это одна специфическая папка. Скрипт можно выполнять многократно - входной контроль не позволит переименовать уже переименованные файлы.
Возможно, я переусложнил задачу

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


Последний раз редактировалось megaloman, 13-07-2017 в 13:12.

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:05, 13-07-2017 | #6

mwz mwz вне форума

Аватара для mwz

Ушел из жизни


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

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


Цитата megaloman:
Если протелепатить »
Не думаю что вопрос об одном файле стоял: читая исходный вопрос сразу, как только увидел формат имени, как раз кучу и представил. Возможно что несколько куч: по разным папкам.

Но за сутки вопрошающий ни разу не появился, и даже на уточняющий вопрос не ответил.

-------
Mikhail Zhilin


Отправлено: 23:18, 13-07-2017 | #7


Ветеран


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

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


Цитата mwz:
Но за сутки вопрошающий ни разу не появился »
Ждём ещё через пару лет с новым вопросом .

Отправлено: 23:37, 13-07-2017 | #8


Аватара для alado

Новый участник


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

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


Iska, спасибо, опробовал. Все работает!

megaloman, но Ваше решение оказалось тем самым.

Согласен что не полностью дал понять что требуется, но скажу одно ВЫРУЧИЛИ!

Отправлено: 19:27, 14-07-2017 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование с условием bat

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход