2011-05-05 128 views
1
@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的文件夹,现在我们可能会混合4月份。批处理脚本按月分隔创建文件夹

这些文件的格式为

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

我想知道是否有无论如何它可以去落0.04并建立文件夹当月所以它会自动把它则需要到文件夹中进入,所以按月搜索很容易。

**如果我们不能使用我们格式化文件的格式来按文件创建进行排序,那么它将成为可能。

+0

为什么不使用powershell?它的功能更强大,你可以用它做更多的事情。 :) – 2011-05-05 20:37:25

+0

是的,我不知道我没写。我被赋予这项任务来解决它,使它做它需要做的事情。我更多的是一个PHP编码器,但我会检查出PowerShell。我也在一个xp盒 – Alex 2011-05-05 20:43:55

+0

什么是日期格式?是YYYY.MM.DD还是YYYY.DD.MM? – 2011-05-05 20:46:28

回答

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

+0

individual您的代码非常棒,我尝试了一些测试,如果我有一个像USERNAME-RCODE-2011.05.02-1314-Disconnected_2.7z这样的文件,无论出于什么原因它会创建一个名为2的文件夹,并且有一个文件是03,因此它读取了2011.05。“ 02或03“这是日期。我如何将它设置为“05”或“0x”中间数字。但你的代码是正确的 – Alex 2011-05-05 23:18:26

+0

@Alex:将行'SET FILE_MONTH =!CURRENT_FILE_DATE:〜-2!'更改为'SET FILE_MONTH =!CURRENT_FILE_DATE:〜5,2!'提取中间2位而不是最后2位。 – indiv 2011-05-06 00:04:03

+0

你是男人还是女人,非常感谢 – Alex 2011-05-06 00:12:33

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 

我可能误解了问题,但如果你能做出的一些假设文件名,这将工作。

+0

Vik我想要做的是我们记录我们公司的远程会话,以及当我们在一天结束时保存我们的文件时,他们保存为用户名-R705-2011.05.04-1601-断开连接。 7z 但是当我们这样做的时候,他们被放到服务器上,就像它在脚本中显示的那样。所以我需要的是当我们将文件保存在01,02,03这样的月份文件夹中时,所以没有人需要进入和篡改文件。以这种方式在月底我可以登录并将它们全部刻录成DVD。我希望有所帮助。 – Alex 2011-05-05 21:48:45

+0

好的,可以说明一些细节,好消息是文件名遵循特定的语法。解决方案可能仍然有效,因为每个命令只会挑选特定月份的文件。所以1月份的文件会被移到%DEST%\ 01等等。 – 2011-05-05 22:01:03

+0

非常感谢,所以我只是将您的代码添加到 XCOPY“%SOURCE%\ *。7z”“%DEST%”/ Y/V/I/R right – Alex 2011-05-05 22:06:03

相关问题