Войти

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


Страниц : 1 [2] 3

Devils0411
18-08-2010, 16:44
А прям в переменной эти символы можно заменить?

zeroua
27-01-2011, 03:40
Нужен простой скрип для переименования *.msi пакета с любым названием в заданное. Все забыл уже и сам нашел простое решение.

ren *.msi newname.msi, думаю и дальше разберусь сам.

mozg777
02-02-2011, 07:53
Народ, есть задача в одних файлах jpeg (*.jpg) заменить _ на ~~
В других после шестого символа вставить ~~
например 4480354941.jpg на 448035~~4941.jpg

El Sanchez
02-02-2011, 12:25
в одних файлах jpeg (*.jpg) заменить _ на ~~ »
mozg777,

@Echo Off
Set Source=C:\Source

For %%A In ("%Source%\*.jpg") Do Call :_Func "%%~nxA"
GoTo :EoF

:_Func
Set FileName=%~n1
Ren "%Source%\%~1" "%FileName:_=~~%%~x1"

В других после шестого символа вставить ~~ »
mozg777,

@Echo Off
Set Source=C:\Source

For %%A In ("%Source%\*.jpg") Do Call :_Func "%%~nxA"
GoTo :EoF

:_Func
Set FileName=%~n1
If Not "%FileName:~5%"=="" Ren "%Source%\%FileName%%~x1" "%FileName:~0,6%~~%FileName:~6%%~x1"

mozg777
03-02-2011, 08:59
Огромное спасибо!
Второй работает на ура!
Первый произвольно в некоторых файлах ставит 4 тильды, поясните плиз как исправить
P.S. Где можно почитать про написание таких скриптов, расшифровку атрибутов

El Sanchez
03-02-2011, 10:24
Первый произвольно в некоторых файлах ставит 4 тильды, поясните плиз как исправить »
mozg777, значит в имени файла встречаются 2 символа подчеркивания подряд

Где можно почитать про написание таких скриптов, расшифровку атрибутов »
Например, Полезные ресурсы по скриптовым языкам администрирования

mozg777
04-02-2011, 07:27
значит в имени файла встречаются 2 символа подчеркивания подряд »
El Sanchez, нет это в тех файлах где надо после шестого символа поставить две тильды. я проверял через сьв - некоторые файлы скрипт прогоняет два раза. что если в функцию включить условие типа если стоят две тильды - то ничего не добавлять.

gora
04-02-2011, 10:07
в функцию включить условие типа если стоят две тильды - то ничего не добавлять. »
Попробуйте так::_Func
Set FileName=%~n1
Set FN=%FileName:~~=%
If "%FN%"=="%FileName%" If Not "%FileName:~5%"=="" Ren "%Source%\%FileName%%~x1" "%FileName:~0,6%~~%FileName:~6%%~x1"

mozg777
04-02-2011, 13:38
явная ошибка, чет не срастается....

El Sanchez
04-02-2011, 14:04
нет это в тех файлах где надо после шестого символа поставить две тильды. я проверял через сьв - некоторые файлы скрипт прогоняет два раза. »
mozg777, это 2 отдельных скрипта с одной лишь командой переименования, никаких повторных прогонов. Просто не надо после отработки одного скрипта применять другой скрипт к уже обработанным файлам.
Я полагаю, что задача у вас такая: заменить символ _ в именах файлов на ~~, если символ _ в имени не встречается, то после шестого символа добавить ~~.

@Echo Off
Set Source=C:\Source

For %%A In ("%Source%\*.jpg") Do Call :_Func "%%~nxA"
GoTo :EoF

:_Func
Set FileName=%~n1
If "%FileName:_=%"=="%FileName%" (
If Not "%FileName:~5%"=="" Ren "%Source%\%FileName%%~x1" "%FileName:~0,6%~~%FileName:~6%%~x1"
) Else (
Ren "%Source%\%~1" "%FileName:_=~~%%~x1"
)


P.S. gora, хорошее решение поиска определенного символа в имени файла. И find/findstr не нужен.

gora
04-02-2011, 14:11
хорошее решение поиска определенного символа в имени файла »
К сожалению на тильде он не сработал :( Спец. символ однако. А вообще применение спец. символов в именах, а тем более их умышленное туда добавление - поиск приключений на свою "нижнюю голову". ИМХО.

mozg777, исправил, попробуйте так.:_Func
Set FileName=%~n1
If Not "%FileName:~5%"=="" If Not "%FileName:~6,2%"=="~~" Ren "%Source%\%FileName%%~x1" "%FileName:~0,6%~~%FileName:~6%%~x1"

amel27
04-02-2011, 15:56
К сожалению на тильде он не сработал »в данном случае можно обойти:
Set "FN=%FileName:*~~=%"

mozg777
07-02-2011, 08:04
2gora: Спасибо!, Работает!
2 El Sanchez - Эффект повторения в некоторых файлах остался

mozg777
10-02-2011, 07:17
Комрады! Выручате!
Получаемый отчет вручную не импортируется в программу, необходимо его привести к другому виду

получаю файл 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

То есть первую строку заменяем полностью, в остальных первый параметр берем из имени файла, удаляем все кавычки, остальное как душе угодно. Хочется универсальности, так как такого вида пять файлов.

SendMessage
10-02-2011, 10:53
Боюсь, средствами 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%

amel27
10-02-2011, 13:42
Хочется универсальности »
вариант на AWK:
@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%"

mozg777
11-02-2011, 12:55
универсальность в смысле имя файла может быть например 9810_Fil_ClarksFort_D2011-01-22.csv хотя здесь можно добиться универсальности только относительно даты в файле. для каждого магазина (Fil_ClarksFort) нужен свой батник.

о! Самый идеальный вариант - в цикле перебирать имена файлов в папке с расширением csv и передавать их в переменную FileName

Второй скрипт работает неправильно. включается только первая стройка и все.

mazariki
02-09-2011, 17:23
Помогите пожалуйста нужно чтобы в файлах (*.*) менялся символ ~ например на _

нашел тут пример:

@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"

то не работает(

SendMessage
03-09-2011, 04:58
Помогите пожалуйста нужно чтобы в файлах (*.*) менялся символ ~ например на _ »
Да, с тильдой есть проблемы. Мне так и не удалось экранировать. Может кто другой знает.
Решил проблему так:
@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%"
Слэш поставлен перед именем файла (set "name=\%~nx1") для корректной работы в том случае, если имя файла начинается с тильды.

PS. Пример дан с заменой тильды и в расширении. Если это не нужно - чуть-чуть надо поменять.

surgutfred
29-09-2014, 23:41
Помогите с такой задачей:
есть куча файлов определенного формата в названии
???#??????#????.txt
????#??????#????.txt

Нужно символы между решетками заменить на текущее число, т.е. к примеру 0930:
????#DD0930#????.txt, поскольку перед первой решеткой кол-во символов варируется, я не могу просто отсчитать от начала кол-во символов. Между решетками кол-во символов постоянно.




© OSzone.net 2001-2012