PDA

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


dark-------13
21-04-2011, 09:14
Здравствуйте,
Подскажите пожалуйста как через bat решить следующую задачу:

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



Пример_1

O=первый текст,
CN="второй "текст"",
или
CN="второй "текст"",
или
CN=второй текст,
или
CN=второй "текст",
или
CN="второй текст",
Причем кавычки было бы здорово отбросить, или они просто учитываться не будут при копирование в имя файла?



Пример_2

лалала O=лалала, CN=лала, Email=d@yandex.ru
лалаолваолаолала »



Пример_3 файл может выглядеть и так

ahgjhfjkkffgdfggjk
dsadfasdfdffadfsf O="djkfhsdjkf", djfhjdfhjkdhfk, CN=dfhdjf ddhfjdhfj hjdfjhddjf, Email=d@yandex.ru sdhfjksdhfjksdfasdf
asdfasdfafsdf



1.Между O и CN необходимо добавить _ если возможно.
Пример
первый текст_второй текст.txt

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

3.Файлы соответственно должны оставаться в своей папке и не менятся.

4.Спец символы O= и CN= могут находится в любом месте в документе каждый спец символ закрывается запятой , между спецсимволом и запятой есть текст который нужно использовать в переименовании текстового файла.

5.Спец символы идут в следующем порядке первым в документе идет O= потом CN=

amel27
21-04-2011, 09:29
Каждый текстовый файл имеет спец символы между которыми находится текст »Немного путанно, что за "спец символы"?.. "CN=" и ","?.. Где располагаются эти спецсиволы по отношению к строке/тексту файла, сколько таких строк в файле? Короче, требуется более детальное описание формата файлов, либо наиболее общий пример файла, от которого можно отталкиваться (само собой, в тегах CODE)

dark-------13
21-04-2011, 09:50
Среди текста документы есть символы CN= далее текст и потом запятая, О= помом текст и сразу запятая т.е. между символами СN= и запятой есть текст, и символами O= и запятой есть текст

Пример
O=текст,
CN=текст2,

В итоге должно быть текст_текст2.txt

amel27
21-04-2011, 10:00
О= помом текст и сразу запятая »
- в строке после последней запятой еще может быть текст?
- такие строки (CN=/O= ) не могут повторяться более одного раза?
- в какой кодировке файлы? (DOS/WIN/UTF/Unicode/...)

dark-------13
21-04-2011, 10:40
После последней запятой идет Email= (ПробелEmail= )

Кодировка win

Симводы CN= O= не повторяются


Заранее спасибо.

amel27
21-04-2011, 11:39
на пробу:
@echo off
SETLOCAL EnableDelayedExpansion

set $DIR=C:\TEST

chcp 1251>nul
for /r "%$DIR%" %%a in (*.txt) do (
for /f "delims=," %%b in ('findstr/bc:"CN=" /c:"O=" "%%a"') do set $%%b
set $CN=!$CN:"=!
set $O=!$O:"=!
ren "%%a" "!$CN!_!$O!%%~xa">nul 2>&1||(chcp 866>nul
echo/&echo/File name "!$CN!_!$O!%%~xa" is busy^^!&echo/File "%%a" skipped.
chcp 1251>nul))

dark-------13
21-04-2011, 12:16
Нет не работает - с файлом ничего не происходит.

amel27
21-04-2011, 12:27
- создал папку C:\TEST
- создал в папке текстовый файл "1.TXT" (WIN):1
CN="текст" 2,user1@mail.ru
2
O=текст "3",user2@mail.ru- запустил батник
- новое имя файла: "текст 2_текст 3.txt"

dark-------13
21-04-2011, 12:30
Извиняюсь, что ввел вас в заблуждение

2 и 3 текст

Пример файла вот такой

лалала O=лалала, CN=лала, Email=d@yandex.ru
лалаолваолаолала

amel27
21-04-2011, 12:52
лалала O=лалала, CN=лала, Email=d@yandex.ru
лалаолваолаолала »во всех предыдущих примерах O=/CN= стояли в начале строк, причем разных, с моим примером работает?

dark-------13
21-04-2011, 13:27
Да конечно для первого примера работает

А для второго примера как необходимо сделать ?

Пример 2
лалала O=лалала, CN=лала, Email=d@yandex.ru
лалаолваолаолала »

Вот еще пример того как может выглядеть файл Пример 3


sdhjkf hjsdafjajkdh kjaf hdjk aj hajkdsfhjkdhfkjfhfhe
dfasdfdf O="djkfhsdjkf", djfhjdfhjkdhfk, CN=dfhdjf ddhfjdhfj hjdfjhddjf, Email=d@yandex.ru asdfasdfasdfasd
asdkjfhsdjkadskfhjkadsjfkasdkfkasdf


Спец символы O= и CN= могут находится в любом месте в документе каждый спец символ закрывается запятой , между спецсимволом и запятой есть текст который нужно использовать в переименовании текстового файла.

amel27
21-04-2011, 18:08
А для второго примера как необходимо сделать ? »
@echo off
SETLOCAL EnableDelayedExpansion

set $DIR=C:\TEST

chcp 1251>nul
for /r "%$DIR%" %%a in (*.txt) do (set "$CN="& set "$O="
for /f "delims=" %%b in ('findstr/rc:"\<CN=" "%%a"') do set "$b=%%b"& set "$b=$!$b:* CN=CN!"& set "!$b:"=!
for /f "delims=" %%b in ('findstr/rc:"\<O=" "%%a"') do set "$b=%%b"& set "$b=$!$b:* O=O!" & set "!$b:"=!
for /f "delims=," %%b in ("!$CN!") do set "$CN=%%b"
for /f "delims=," %%b in ("!$O!") do set "$O=%%b"

ren "%%a" "!$CN!_!$O!%%~xa">nul 2>&1||(chcp 866>nul& echo/
echo/File name "!$CN!_!$O!%%~xa" is busy^^!&echo/File "%%a" skipped.& chcp 1251>nul
))




© OSzone.net 2001-2012