Компьютерный форум 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=232455)

Serg2010 09-04-2012 21:56 1896617

Переименование группы файлов по дате создания
 
Добрый день!

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

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

Iska 09-04-2012 22:53 1896654

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 1897168

Добрый вечер!

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

:-(

Iska 10-04-2012 20:16 1897221

Serg2010, а Вы проверьте.

El Sanchez 12-04-2012 17:46 1898417

Цитата:

Цитата Serg2010
Да надо именно в 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"


Цитата:

Цитата Serg2010
Так как другие какие либо скрипты и программы запрещены отделом защиты информации. »

Чем мотивируют-то?

Iska 12-04-2012 19:04 1898451

Цитата:

Цитата El Sanchez
Чем мотивируют-то? »

«Низзяяяя!» ;)


Цитата:

Цитата El Sanchez
…только до минут, без секунд. »

Можно по пути брать из Wbem:
Код:

wmic.exe DataFile where "Name = 'c:\\boot.ini'" get CreationDate /value

El Sanchez 12-04-2012 21:32 1898536

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 1899101

спасибо.... секунды в принципе и не важны .... ну что так всё сложно то а :-)

Iska 14-04-2012 00:40 1899213

Serg2010, если секунды не важны, то это проще.


Время: 09:03.

Время: 09:03.
© OSzone.net 2001-