PDA

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


Serg2010
09-04-2012, 21:56
Добрый день!

Подскажите, как в некоторой папке, по какой-либо маске (к примеру *.arj) переименовать все файлы удовлетворяющие маске добавив впереди дату создания до секунд.
например было Dat_day1.arj, а будет, например, 2012-04-09-23-44-25_Dat_day1.arj, где сначала идет год, месяц, день и т.д. Как переименовать отдельный файл знаю, а вот обойти все в цикле затрудняюсь. Необходимо сделать все проверки на наличие папки, файлов и т.д. что там по уму нужно.

Пробовал найденное на форуме, но почему то не срабатывает, пишет не найден файл
Спасибо.

Iska
09-04-2012, 22:53
Serg2010, WSH устроит?
Option Explicit

Dim strFolder
Dim strExtension

Dim objFile
Dim dtDateCreated


With WScript.Arguments
If .Count <> 2 Then
WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptFullName & """ ""<Path>"" ""<mask>"""
WScript.Quit 1
Else
strFolder = .Item(0)
strExtension = .Item(1)
End If
End With

With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strFolder) Then
For Each objFile In .GetFolder(strFolder).Files
If UCase(.GetExtensionName(objFile.Name)) = UCase(strExtension) Then
dtDateCreated = objFile.DateCreated

objFile.Name = _
Align(Year (dtDateCreated), 4) & "_" & _
Align(Month (dtDateCreated), 2) & "_" & _
Align(Day (dtDateCreated), 2) & "_" & _
Align(Hour (dtDateCreated), 2) & "_" & _
Align(Minute(dtDateCreated), 2) & "_" & _
Align(Second(dtDateCreated), 2) & "_" & _
objFile.Name
End If
Next
Else
WScript.Echo "Folder [" & strFolder & "] not found"
End If
End With

WScript.Quit 0

Function Align(anyValue, lngWidth)
Align = Right(String(lngWidth, "0") & CStr(anyValue), lngWidth)
End Function
Первым аргументом указываете путь, вторым — расширение.

Serg2010
10-04-2012, 19:14
Добрый вечер!

Да надо именно в cmd. Так как другие какие либо скрипты и программы запрещены отделом защиты информации.

:-(

Iska
10-04-2012, 20:16
Serg2010, а Вы проверьте.

El Sanchez
12-04-2012, 17:46
Да надо именно в cmd »
Serg2010, на CMD только до минут, без секунд.

@Echo Off
SetLocal
If "%~1"=="" Echo:Параметры не заданы.&Exit /B 1
If "%~2"=="" Echo:Не задан второй параметр.&Exit /B 1
If Not Exist "%~1" Echo:Папка %~1 не найдена.&Exit /B 1

For /F "Tokens=1-6* Delims=.: " %%A In ('Dir /A-D /TC /-C "%~1\*.%~2"^|FindStr /i .%~2$') Do Ren "%~1\%%G" "%%C-%%B-%%A-%%D-%%E_%%G"

Пример вызова: script.bat "C:\Source" "arj"


Так как другие какие либо скрипты и программы запрещены отделом защиты информации. »
Чем мотивируют-то?

Iska
12-04-2012, 19:04
Чем мотивируют-то? »
«Низзяяяя!» ;)

…только до минут, без секунд. »
Можно по пути брать из Wbem:
wmic.exe DataFile where "Name = 'c:\\boot.ini'" get CreationDate /value

El Sanchez
12-04-2012, 21:32
Iska, спасибо, что напомнили, получилось вот что:

@Echo Off
SetLocal
If "%~1"=="" Echo:Параметры не заданы.&Exit /B 1
If "%~2"=="" Echo:Не задан второй параметр.&Exit /B 1
If Not Exist "%~1" Echo:Папка %~1 не найдена.&Exit /B 1

Set Source=%~pn1
:Loop
If Not "%Source%"=="" If "%Source:~-1%"=="\" Set Source=%Source:~0,-1%& GoTo :Loop
For /F "Tokens=2* Delims=," %%A In ('WMIC DataFile Where ^"Drive^=^'%~d1^' And Path^=^'%%Source:\^=\\%%\\^' And Extension^=^'%~2^'^" Get Name^,CreationDate /Format:CSV 2^>nul^|FindStr /i .%~2$') Do (
Set dF=%%A
Call Ren "%%B" "%%dF:~0,4%%-%%dF:~4,2%%-%%dF:~6,2%%-%%dF:~8,2%%-%%dF:~10,2%%-%%dF:~12,2%%_%%~nxB"
)

Serg2010
13-04-2012, 21:39
спасибо.... секунды в принципе и не важны .... ну что так всё сложно то а :-)

Iska
14-04-2012, 00:40
Serg2010, если секунды не важны, то это (http://forum.oszone.net/post-1898417.html#post1898417) проще.




© OSzone.net 2001-2012