用于分隔按月创建文件夹的批处理脚本

时间:2011-05-05 19:30:23

标签: encoding batch-file directory

@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与4月混在一起。

文件格式为

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

我想知道是否有它可以关闭.04并为该月制作一个文件夹,因此它会自动将其放入需要进入的文件夹中,因此很容易按月搜索。

**如果我们不能使用我们格式化文件的格式来按文件创建排序,那么这是可能的。

2 个答案:

答案 0 :(得分:1)

删除行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>。月份只是文件名中的2位数字。

答案 1 :(得分:0)

好像你有一个文件夹,其中包含文件名中嵌入了不同数字月份值的文件。我正在考虑从每个文件中提取该值,但是使用具有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

我可能误解了这个问题,但如果你能对文件名做出一些假设,那就行了。