|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование файлов с заменой символов по маске |
|
CMD/BAT - [решено] Переименование файлов с заменой символов по маске
|
Новый участник Сообщения: 11 |
Здравствуйте!
Нужно очень сделать батничек, который переименовывает файлы PDF, а конкретнее заменяет в названиях существующих файлов символы " ", "_","+","=","&" на "-". Я сделал что так что бы заменял только один символ, а вот как подставит регулярное выражение не пойму. renamer.bat: for %%g in (*.pdf) do call :s_subroutine "%%~nxg" "%%g" :s_subroutine set _sss=%1 set _ddd=%_sss:_=-% ren %2 %_ddd% goto :eof Спасибо. |
|
Отправлено: 13:43, 25-01-2010 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата El Sanchez:
![]() mozg777, исправил, попробуйте так. |
|
Отправлено: 14:11, 04-02-2011 | #31 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата gora:
|
|
Отправлено: 15:56, 04-02-2011 | #32 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать 2gora: Спасибо!, Работает!
2 El Sanchez - Эффект повторения в некоторых файлах остался |
Отправлено: 08:04, 07-02-2011 | #33 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Комрады! Выручате!
Получаемый отчет вручную не импортируется в программу, необходимо его привести к другому виду получаю файл 7420_Fil_AngANGARSK_D2011-01-21.csv (обычный текстовой) внутри "branchno","store","country","period","hour","zone","customers - incoming","customers - outgoing" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","09:00","Floor 1, main1","7","3" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","11:00","Floor 1, main1","","1" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","12:00","Floor 1, main1","9","10" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","13:00","Floor 1, main1","10","7" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","14:00","Floor 1, main1","12","10" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","15:00","Floor 1, main1","9","14" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","16:00","Floor 1, main1","19","11" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","17:00","Floor 1, main1","16","16" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","18:00","Floor 1, main1","7","10" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","19:00","Floor 1, main1","15","11" "AngANGARSK","203 Ecco-geox","Russian Federation","2011-01-21","20:00","Floor 1, main1","10","6" нужно привести к виду storeid, shopname, branchno, date, location, time, in-coming, out-going 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,09:00,7,3 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,11:00,0,1 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,12:00,9,10 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,13:00,10,7 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,14:00,12,10 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,15:00,9,14 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,16:00,19,11 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,17:00,16,16 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,18:00,7,10 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,19:00,15,11 7420,203 Ecco-geox,AngANGARSK,2011-01-21,Main1,20:00,10,6 То есть первую строку заменяем полностью, в остальных первый параметр берем из имени файла, удаляем все кавычки, остальное как душе угодно. Хочется универсальности, так как такого вида пять файлов. |
Последний раз редактировалось mozg777, 10-02-2011 в 07:24. Отправлено: 07:17, 10-02-2011 | #34 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Боюсь, средствами cmd универсальности добиться тяжело. По крайней мере, я не вижу приемлимого пути. Но конкретную задачу решить просто:
@echo off setlocal enabledelayedexpansion set "FileName=7420_Fil_AngANGARSK_D2011-01-21.csv" echo storeid,shopname,branchno,date,location,time,in-coming,out-going>%FileName%_ for /f "skip=1 tokens=1-2,4-5,7-9 delims=," %%a in (%FileName%) do ( set "pre=%FileName:~0,4%,%%~b,%%~a,%%~c,%%e,%%~d,%%~f,%%~g" set "pre=!pre:, =,!" & set "pre=!pre:"=!" echo !pre:,,=,0,!>>%FileName%_ ) ren %FileName% %FileName:~0,-4%.bak ren %FileName%_ %FileName% |
Отправлено: 10:53, 10-02-2011 | #35 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата mozg777:
@echo off set $f=7420_Fil_AngANGARSK_D2011-01-21.csv set $t=%TEMP%\%~n0.tmp >"%$t%" echo storeid,shopname,branchno,date,location,time,in-coming,out-going <"%$f%" >>"%$t%" awk -v FS=\",\" -v _=, ^ "NR>1{$0=substr($0,2,length()-2);sub(/.*, */,\"\",$6);print \"%$f:~,4%\"_$2_$1_$4_$6_$5_$7_$8}" copy "%$t%" "%$f%">nul && del "%$t%" |
|
Отправлено: 13:42, 10-02-2011 | #36 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать универсальность в смысле имя файла может быть например 9810_Fil_ClarksFort_D2011-01-22.csv хотя здесь можно добиться универсальности только относительно даты в файле. для каждого магазина (Fil_ClarksFort) нужен свой батник.
о! Самый идеальный вариант - в цикле перебирать имена файлов в папке с расширением csv и передавать их в переменную FileName Второй скрипт работает неправильно. включается только первая стройка и все. |
Последний раз редактировалось mozg777, 11-02-2011 в 13:13. Отправлено: 12:55, 11-02-2011 | #37 |
Новый участник Сообщения: 1
|
Профиль | Отправить PM | Цитировать Помогите пожалуйста нужно чтобы в файлах (*.*) менялся символ ~ например на _
нашел тут пример: @Echo Off Set Source=C:\test\sed For %%A In ("%Source%\*.*") Do Call :_Func "%%~nxA" GoTo :EoF :_Func Set FileName=%~n1 Ren "%Source%\%~1" "%FileName:_=~~%%~x1" он заменяет _ на ~~ но когда меняю на Ren "%Source%\%~1" "%FileName:~=_%%~x1" то не работает( |
Последний раз редактировалось mazariki, 02-09-2011 в 17:40. Отправлено: 17:23, 02-09-2011 | #38 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Цитата mazariki:
Решил проблему так: @echo off set "Source=z:\folder" for %%i in (%Source%\*.*) do call:ReplaceAndRename "%%i" goto:eof :ReplaceAndRename set "name=\%~nx1" :loop echo %name% | find "~" >nul && (for /f "tokens=1* delims=~" %%a in ("%name%") do set "name=%%a_%%b" & goto loop) ren %1 "%name:~1%" PS. Пример дан с заменой тильды и в расширении. Если это не нужно - чуть-чуть надо поменять. |
|
Последний раз редактировалось SendMessage, 03-09-2011 в 05:08. Причина: добавлен постскриптум Отправлено: 04:58, 03-09-2011 | #39 |
Пользователь Сообщения: 70
|
Профиль | Отправить PM | Цитировать Помогите с такой задачей:
есть куча файлов определенного формата в названии ???#??????#????.txt ????#??????#????.txt Нужно символы между решетками заменить на текущее число, т.е. к примеру 0930: ????#DD0930#????.txt, поскольку перед первой решеткой кол-во символов варируется, я не могу просто отсчитать от начала кол-во символов. Между решетками кол-во символов постоянно. |
Отправлено: 23:41, 29-09-2014 | #40 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Система - [addon] Internet Explorer 8 Rus (с заменой файлов IE6) версия 14.5.3 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 955 | 22-01-2021 22:59 | |
Система - [addon] Internet Explorer 7 Rus (с заменой файлов IE6) версия 14.5.3 | jameszero | Наборы обновлений для Windows XP/2003/Windows 7 | 1277 | 06-02-2015 16:30 | |
CMD/BAT - [решено] Перемещение и удаление файлов по условию и маске | VitHAK | Скриптовые языки администрирования Windows | 14 | 23-12-2013 08:57 | |
Установка - Помогите с заменой файлов в дистрибутиве | AlexThePeacemaker | Microsoft Windows 2000/XP | 0 | 12-12-2009 11:42 | |
Разрешение записи файлов по маске | Green_Fox | Microsoft Windows 2000/XP | 5 | 11-08-2006 12:35 |
|