Показать полную графическую версию : Переименование группы файлов по дате создания
Serg2010
09-04-2012, 21:56
Добрый день!
Подскажите, как в некоторой папке, по какой-либо маске (к примеру *.arj) переименовать все файлы удовлетворяющие маске добавив впереди дату создания до секунд.
например было Dat_day1.arj, а будет, например, 2012-04-09-23-44-25_Dat_day1.arj, где сначала идет год, месяц, день и т.д. Как переименовать отдельный файл знаю, а вот обойти все в цикле затрудняюсь. Необходимо сделать все проверки на наличие папки, файлов и т.д. что там по уму нужно.
Пробовал найденное на форуме, но почему то не срабатывает, пишет не найден файл
Спасибо.
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. Так как другие какие либо скрипты и программы запрещены отделом защиты информации.
:-(
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"
Так как другие какие либо скрипты и программы запрещены отделом защиты информации. »
Чем мотивируют-то?
Чем мотивируют-то? »
«Низзяяяя!» ;)
…только до минут, без секунд. »
Можно по пути брать из 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
спасибо.... секунды в принципе и не важны .... ну что так всё сложно то а :-)
Serg2010, если секунды не важны, то это (http://forum.oszone.net/post-1898417.html#post1898417) проще.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.