Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Переименование файла по данным из самого файла (http://forum.oszone.net/showthread.php?t=205298)

dark-------13 21-04-2011 09:14 1662876

Переименование файла по данным из самого файла
 
Здравствуйте,
Подскажите пожалуйста как через 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 1662889

Цитата:

Цитата dark-------13
Каждый текстовый файл имеет спец символы между которыми находится текст »

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

dark-------13 21-04-2011 09:50 1662903

Среди текста документы есть символы CN= далее текст и потом запятая, О= помом текст и сразу запятая т.е. между символами СN= и запятой есть текст, и символами O= и запятой есть текст

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

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

amel27 21-04-2011 10:00 1662908

Цитата:

Цитата dark-------13
О= помом текст и сразу запятая »

- в строке после последней запятой еще может быть текст?
- такие строки (CN=/O= ) не могут повторяться более одного раза?
- в какой кодировке файлы? (DOS/WIN/UTF/Unicode/...)

dark-------13 21-04-2011 10:40 1662934

После последней запятой идет Email= (ПробелEmail= )

Кодировка win

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


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

amel27 21-04-2011 11:39 1662984

на пробу:
Код:

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

Нет не работает - с файлом ничего не происходит.

amel27 21-04-2011 12:27 1663027

- создал папку 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 1663032

Извиняюсь, что ввел вас в заблуждение

2 и 3 текст

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

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

amel27 21-04-2011 12:52 1663055

Цитата:

Цитата dark-------13
лалала O=лалала, CN=лала, Email=d@yandex.ru
лалаолваолаолала »

во всех предыдущих примерах O=/CN= стояли в начале строк, причем разных, с моим примером работает?

dark-------13 21-04-2011 13:27 1663074

Да конечно для первого примера работает

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

Пример 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 1663305

Цитата:

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

Код:

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



Время: 22:54.

Время: 22:54.
© OSzone.net 2001-