пакетный скрипт для идентификации папок, их архивирования и перемещения

Я новичок в написании сценариев для Windows, потратив более 13 лет на написание сценариев в оболочке Unix. Мне нужна помощь в поиске способа найти папку, которая была изменена в последний раз около 30 дней назад, а затем заархивировать папку и переместить ее в другую папку «Архив». Структура папок выглядит следующим образом:

D:\AuditFiles\2013.05
D:\AuditFiles\2013.06
D:\AuditFiles\Archive

Таким образом, цель состоит в том, чтобы переместить 2013.05 в каталог архива после его архивирования.

Я пробовал forfiles.exe, который не позволяет мне пропустить папку Archive, и я пробовал каталог /ad, но это не позволяет мне конкретные последние измененные дни были +30.


person Fdude    schedule 01.07.2013    source источник
comment
Может быть, вам нужно for /r   -  person Monacraft    schedule 01.07.2013
comment
Если вы не хотите использовать PowerShell, VBScript или какой-либо реальный язык программирования (Perl, Python и т. д.), я бы использовал GNU find (UnixUtils). Это намного лучше, чем любая родная функция Windows.   -  person mojo    schedule 01.07.2013
comment
К сожалению, мне не разрешено устанавливать какие-либо утилиты. Мне нужно написать сценарий, чтобы его можно было использовать в качестве запланированного задания для запуска первого числа каждого месяца.   -  person Fdude    schedule 01.07.2013


Ответы (2)


Это один из способов получить самую старую папку, кроме Архива, которая, кажется, вам нужна.

@echo off
pushd "D:\AuditFiles\"
for /f "delims=" %%a in ('dir /b /ad /o-d') do (
if /i not "%%a"=="Archive" set "folder=%%a"
)
echo oldest folder is "%folder%"
popd
person foxidrive    schedule 01.07.2013
comment
Я пробовал указанный выше сегмент и получаю, что `'set folder=2013.06' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. 'set folder=2013.05' не распознается как внутренняя или внешняя команда, исполняемая программа или пакетный файл. самая старая папка ` - person Fdude; 01.07.2013
comment
@ user2538606 попробуйте set "folder=%%a". небольшая опечатка. - person Endoro; 01.07.2013

Простой способ, предполагая, что ваш формат даты Mo 07/01/2013, проверьте это с помощью команды echo %date%:

@echo OFF &setlocal
REM %date% format is "Mo 07/01/2013"
FOR /f "tokens=2,4delims=/ "  %%a IN ("%date%") DO SET /a month=%%a, year=%%b
IF %month% equ 1 (
    SET /a month=12
    SET /a year-=1
) ELSE SET /a month-=1
if %month% lss 10 SET "month=0%month%"
SET "folderToSearch=%year%.%month%"
IF NOT EXIST "D:\AuditFiles\%folderToSearch%\" ECHO Folder NOT found: %folderToSearch%&goto:eof
ZIP [put options for your ZIP app here] "D:\AuditFiles\Archive\%folderToSearch%.zip" "D:\AuditFiles\%folderToSearch%"
person Endoro    schedule 01.07.2013
comment
Похоже, это не решает проблему самого старого каталога, кроме архива. Если этот сегмент сценария может включать в себя самый старый бит каталога, это было бы здорово. - person Fdude; 01.07.2013
comment
так что примите решение @foxidrive. это oldest directory other than Archive слишком запутывает меня в начале недели :) - person Endoro; 01.07.2013