Пакетный скрипт, который разделяет, который создает папку по месяцам - PullRequest
1 голос
/ 05 мая 2011
@ECHO OFF
SETLOCAL EnableDelayedExpansion

REM Set variables
SET SOURCE=C:\My WebEx Recordings
SET DEST=\\XXXRD12\c$\WebExVideoArchive
SET 7ZIP=C:\Program Files\7-Zip\7z.exe

REM Compress local files with 7zip
ECHO ---------------------------------------------------------
ECHO    BEGINNING VIDEO COMPRESSION OPERATIONS
ECHO ---------------------------------------------------------
CD /D "%SOURCE%"
FOR %%f in ("*.wrf") DO (
    SET FILENAME=%%~nf
    ECHO Compressing !FILENAME!
    "!7ZIP!" a -t7z -aoa "!FILENAME!.7z" "%%f"
)

REM Copy compressed files
ECHO ---------------------------------------------------------
ECHO    COMPRESSION COMPLETE - BEGINNING COPY OPERATIONS
ECHO ---------------------------------------------------------
REM XCOPY <source> <destination> <options>
XCOPY "%SOURCE%\*.7z" "%DEST%" /Y /V /I /R

REM Confirm successful copy, then delete originals
IF %ERRORLEVEL% EQU 0 (
    ECHO Copy Operation Successful. Removing Originals...
    DEL /Q "%SOURCE%\*.*"
)ELSE (
    ECHO Error Detected During Copying. Please try again...Press Any Key to Exit    
    Pause
)

Я пытаюсь отредактировать этот код, чтобы при запуске командного файла он создавал папку на основе месяца нашего формата файла. Мы много раз запускали этот сценарий, но забыли создать папку с именем April, теперь у нас есть May, смешанный с April.

Файлы отформатированы как

Username-R705-2011.05.04-1601-Disconnected.7z

Мне было интересно, может ли он в любом случае выйти из .04 и создать папку для этого месяца, чтобы он автоматически поместил ее в папку, в которую он должен войти, поэтому поиск по месяцу будет простым ,

** было бы возможно, если бы мы не могли использовать формат, в котором мы форматируем наши файлы, чтобы он сортировался при создании файла.

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Стереть все, что находится ниже (и включая) строку REM XCOPY <source> <destination> <options>, и заменить ее следующим:

for /F "usebackq delims=" %%a in (`dir /b "%SOURCE%\*.7z"`) do (
    SET CURRENT_FILE=%%a

    REM Extract the month.
    for /F "usebackq tokens=3 delims=-" %%i in ('!CURRENT_FILE!') do (
        SET CURRENT_FILE_DATE=%%i
        SET FILE_MONTH=!CURRENT_FILE_DATE:~-2!
        SET MONTH_DEST=!DEST!\!FILE_MONTH!
    )

    XCOPY "%SOURCE%\!CURRENT_FILE!" "!MONTH_DEST!\" /Y /V /I /R

    REM Confirm successful copy, then delete original
    IF %ERRORLEVEL% EQU 0 (
        ECHO Copy Operation Successful. Removing Original...
        DEL /Q "%SOURCE%\!CURRENT_FILE!"
    )ELSE (
        ECHO Error while copying "%SOURCE%\!CURRENT_FILE!.
    )
)

Этот код проходит через каждый файл, соответствующий %SOURCE%\*.7z, извлекает месяц и затем копируетфайл в %DEST%\<month>.Месяц - это просто двузначное число из имени файла.

0 голосов
/ 06 мая 2011

Похоже, у вас есть папка, полная файлов с различными значениями числовых месяцев, встроенных в имя файла. Я думал о том, чтобы извлечь это значение из каждого файла, но было бы проще использовать групповые символы подстановки с 12 различными командами XCOPY:

XCOPY "%SOURCE%\*-*-20??.??.01-*.7z" "%DEST%\01" /Y /V /I /R
XCOPY "%SOURCE%\*-*-20??.??.02-*.7z" "%DEST%\02" /Y /V /I /R
[...]
XCOPY "%SOURCE%\*-*-20??.??.12-*.7z" "%DEST%\12" /Y /V /I /R

Возможно, я неправильно понимаю вопрос, но если вы сделаете некоторые предположения относительно имен файлов, это сработает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...