PDA

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


Mikhail_R
15-03-2013, 09:49
Добрый день,

Может подскажет кто-нибудь, как совершить такое действие: необходимо вытащить из архива файл и добавить к его имени дату создания данного файла.

Спасибо!

Foreigner
15-03-2013, 19:51
Mikhail_R,
Если заранее известен файл (из test.zip надо извлечь test.txt, который в корне архива):

@echo off
setlocal

set "outdir=%userprofile%\desktop"
set "path=%path%;%programfiles%\7-zip"

7z e test.zip test.txt -o"%outdir%"
for %%i in ("%outdir%\test.txt") do call:1 %%~ti
goto:eof

:1
ren "%outdir%\test.txt" %1_test.txt


В общем возможны варианты, но на общий вопрос -- общий ответ. Уточняйте, если что.

Mikhail_R
18-03-2013, 09:49
Foreigner, спасибо большое! Теперь только еще пару вопросов: Как в это же имя внести дату последнего изменения?

@echo off
setlocal
set "outdir=d:\backup"
set "path=%path%;%programfiles%\7-zip"
7z e "D:\Work\RStyle\bat\PIDGWL.ZIP" entity.xml -o"%outdir%"
for %%i in ("d:\backup\entity.xml") do call:1 %%~ti
goto:eof
:1
ren "%outdir%\entity.xml" entity_sanctions_%1.xml
for %%f in (entity_sanctions_%1.xml) do set FILE=%%f
"C:\Program Files\IBM\Lotus\Notes\jvm\bin\java.exe" Test "%FILE%"

Вот подправленный для моих файлов код.

Foreigner
18-03-2013, 20:43
Mikhail_R,
Это и есть дата последнего изменения. Можно узнать и время создания и доступа и изменения, но это сильно усложнит батник. Вот пример, как можно получить все эти данные:

wmic datafile where name="C:\\Folder\\test.txt" get creationdate, lastaccessed, lastmodified /value

Чтобы привести в божеский вид:

@echo off
setlocal enabledelayedexpansion

set "wmic=wmic datafile where name="C:\\Folder\\test.txt" get creationdate, lastaccessed, lastmodified /value"

for /f "tokens=*" %%i in (' "%wmic%" ') do 1>nul set "%%i"

for %%i in (CreationDate LastAccessed LastModified) do (

set "%%i=!%%i:~6,2!.!%%i:~4,2!.!%%i:~0,4! !%%i:~8,2!:!%%i:~10,2!:!%%i:~12,2!"
set %%i

)

Mikhail_R
19-03-2013, 09:46
Я, конечно, дико извиняюсь, что туплю, но можно время последнего изменения подставить в имя файла:
(вот здесь только дата подставляется)

for %%i in ("d:\backup\entity.xml") do call:1 %%~ti
goto:eof
:1
ren "%outdir%\entity.xml" entity_sanctions_%1.xml

С предыдущим сообщением не получается:(

Спасибо!

Foreigner
19-03-2013, 18:22
Mikhail_R,
Без секунд:

for %%i in ("d:\backup\entity.xml") do call:1 "%%~ti"
goto:eof

:1
set "datetime=%~1"
set "datetime=%datetime::=-%"

ren "%outdir%\entity.xml" "entity_sanctions_%datetime: =_%.xml"

Mikhail_R
20-03-2013, 10:26
Огромное спасибо!!! Все работает!!
for %%f in ("entity_sanctions_%datetime: =-%.xml") do set FILE=%%f
"C:\Program Files\IBM\Lotus\Notes\jvm\bin\java.exe" Test "%FILE%"
mkdir "D:\Work\RStyle\bat\entity_sanctions_%datetime: =-%"
После переименования, имя файла подставляется в java функцию и там он разбивается на много файлов с такими именами entity_sanctions_12.03.2013-18-54.xml.part<число>.xml
вопрос по bat: как вот эти все файлы entity_sanctions_12.03.2013-18-54.xml.part<число>.xml переложить в папку entity_sanctions_12.03.2013-18-54, просто этих файлов неизвестно сколько может быть после распаковки.

Спасибо!

Foreigner
20-03-2013, 20:33
Mikhail_R, попробуй так:

....
mkdir "D:\Work\RStyle\bat\entity_sanctions_%datetime: =-%"

move entity_sanctions_%datetime: =-%.xml.part*.xml "D:\Work\RStyle\bat\entity_sanctions_%datetime: =-%"

Mikhail_R
21-03-2013, 09:35
Работает как часы!! Спасибо большое!




© OSzone.net 2001-2012