【问题标题】:Batch file to append folder names with timestamp and move to destination directory批处理文件以附加带有时间戳的文件夹名称并移动到目标目录
【发布时间】:2017-08-08 22:55:08
【问题描述】:

在我看来,这似乎是一个常见问题,但我在 Google 上花费了数小时,但未能找到合适的解决方案。

我在源目录中有文件夹: C:\备份

我已经设置了一个目标目录: C:\存档

我只需要一个批处理文件: 1) 为源目录中的所有文件夹(不是其中的文件)添加时间戳,并且 2)然后将它们移动到目标目录。

如果 .bat 文件也可以写入日志文件以防万一发生故障,那就太好了。

这是我找到的代码,但它只复制文件夹内的文件,而不是文件夹本身。我需要文件和文件夹,并将时间戳添加到文件夹中。

@echo off
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"
set "YY=%dt:~2,2%" & set "YYYY=%dt:~0,4%" & set "MM=%dt:~4,2%" & set "DD=%dt:~6,2%"
set "HH=%dt:~8,2%" & set "Min=%dt:~10,2%" & set "Sec=%dt:~12,2%"

SET "DATE_FOLDER=%YYYY%%MM%%DD%"

cd /d "C:\LC_Data_Review\backups\"
SET "ACHIEVE_DIR=C:\archived_data_packages\" 
md "%ACHIEVE_DIR%" 2>nul

for /r %%a in (*) do (
for /r %%b in (*) do move "%%~b" "%ACHIEVE_DIR%\%%~nb - %DATE_FOLDER%%%~xb"
rd /s /q "%%a"
)

以上代码只复制文件。

提前感谢任何可以提供代码的人!

凯文

【问题讨论】:

    标签: batch-file timestamp append move


    【解决方案1】:

    您可以使用此脚本来提供帮助。首先,它获取日期和时间,然后将其存储为变量并重命名它和其他东西。路径如路径,起点和终点作为起点和终点的路径。

    REM Date and time code taken from http://www.winnetmag.com/windowsscripting/article/articleid/9177/windowsscripting_9177.html
    @echo off
    for /f "tokens=1-7 delims=:/-, " %%i in ('echo exit^|cmd /q /k"prompt $d $t"') do (
       for /f "tokens=2-4 delims=/-,() skip=1" %%a in ('echo.^|date') do (
          set dow=%%i
          set %%a=%%j
          set %%b=%%k
          set %%c=%%l
          set hh=%%m
          set min=%%n
          set ss=%%o
       )
    )
    
    echo %dow% %yy%-%mm%-%dd% @ %hh%:%min%:%ss%
    pause
          set %%c=%%l
          set hh=%%m
          set min=%%n
          set ss=%%o
       )
    )
    
    set filename=%dow% %yy%-%mm%-%dd% @ %hh%:%min%:%ss%
    for /D %%f in (C:path) do rename "%%f" "%%~nxf_%filename%"
    robocopy c:\start c:\finish /e
    

    【讨论】:

    • 感谢金桔提供的有用信息。我会在早上运行它,让你知道它是如何工作的!
    • 再次感谢您!我不确定用什么替换“C:path”,所以我使用了源目录的路径。 .bat 文件仅复制了子文件夹,但没有复制其中的任何文件,并且没有附加任何带有时间戳的内容。我需要复制文件夹及其文件。
    • 此外,原始文件夹仍保留在源目录中,而不是移动到目的地。
    • @Systech,非常抱歉。好像你已经找到答案了,干得好!
    • 不用担心 - 再次感谢您的帮助。我很感激!
    【解决方案2】:

    这里有一个解决方案:

    假设您创建了一个名为 archive.bat 的批处理文件,其内容如下:

    for /d %%d in (%1\*) do (xcopy "%%d\*" "%2\%%~nxd-%DATE:~-4%-%DATE:~4,2%-%DATE:~7,2%" /E /V /I)&&(rd "%%d" /s /q)
    

    你叫它:

    archive.bat C:\backups C:\archive
    

    给定文件夹:

    C:\backups\one
    C:\backups\two
    

    你会得到:

    C:\archive\one-YYYY-MM-DD
    C:\archive\two-YYYY-MM-DD
    

    其中 YYYY-MM-DD 是当前日期。根据需要更改日期格式字符串。

    采取的步骤是:

    1. 使用 for /d 迭代第一个参数 (%1) 中指定路径的子目录。
    2. 使用 xcopy 将每个目录的所有内容移动到附加时间戳的第二个参数 (%2) 中指定路径的子目录。 xcopy /I 指定创建新的时间戳目录。
    3. 不提示递归删除源目录。

    这是我的测试的输出:

    C:\>dir C:\backups /b /s
    C:\backups\One
    C:\backups\Two
    C:\backups\One\alpha
    C:\backups\One\beta
    C:\backups\One\alpha\New Bitmap Image.bmp
    C:\backups\One\alpha\New Rich Text Document.rtf
    C:\backups\One\alpha\New Text Document.txt
    C:\backups\One\beta\New Bitmap Image.bmp
    C:\backups\One\beta\New Rich Text Document.rtf
    C:\backups\One\beta\New Text Document.txt
    C:\backups\Two\alpha
    C:\backups\Two\beta
    C:\backups\Two\alpha\New Bitmap Image.bmp
    C:\backups\Two\alpha\New Rich Text Document.rtf
    C:\backups\Two\alpha\New Text Document.txt
    C:\backups\Two\beta\New Bitmap Image.bmp
    C:\backups\Two\beta\New Rich Text Document.rtf
    C:\backups\Two\beta\New Text Document.txt
    
    C:\>test C:\backups C:\archive\
    C:\backups\One\alpha\New Bitmap Image.bmp
    C:\backups\One\alpha\New Rich Text Document.rtf
    C:\backups\One\alpha\New Text Document.txt
    C:\backups\One\beta\New Bitmap Image.bmp
    C:\backups\One\beta\New Rich Text Document.rtf
    C:\backups\One\beta\New Text Document.txt
    6 File(s) copied
    
    C:\backups\Two\alpha\New Bitmap Image.bmp
    C:\backups\Two\alpha\New Rich Text Document.rtf
    C:\backups\Two\alpha\New Text Document.txt
    C:\backups\Two\beta\New Bitmap Image.bmp
    C:\backups\Two\beta\New Rich Text Document.rtf
    C:\backups\Two\beta\New Text Document.txt
    6 File(s) copied
    
    C:\>dir C:\archive /b /s
    C:\archive\One-2017-08-09
    C:\archive\Two-2017-08-09
    C:\archive\One-2017-08-09\alpha
    C:\archive\One-2017-08-09\beta
    C:\archive\One-2017-08-09\alpha\New Bitmap Image.bmp
    C:\archive\One-2017-08-09\alpha\New Rich Text Document.rtf
    C:\archive\One-2017-08-09\alpha\New Text Document.txt
    C:\archive\One-2017-08-09\beta\New Bitmap Image.bmp
    C:\archive\One-2017-08-09\beta\New Rich Text Document.rtf
    C:\archive\One-2017-08-09\beta\New Text Document.txt
    C:\archive\Two-2017-08-09\alpha
    C:\archive\Two-2017-08-09\beta
    C:\archive\Two-2017-08-09\alpha\New Bitmap Image.bmp
    C:\archive\Two-2017-08-09\alpha\New Rich Text Document.rtf
    C:\archive\Two-2017-08-09\alpha\New Text Document.txt
    C:\archive\Two-2017-08-09\beta\New Bitmap Image.bmp
    C:\archive\Two-2017-08-09\beta\New Rich Text Document.rtf
    C:\archive\Two-2017-08-09\beta\New Text Document.txt
    

    【讨论】:

    • 感谢 Karl 提供的有用信息。我会在早上回来报告。非常感谢!
    • 这很棒!谢谢!如何让脚本复制子目录中的文件?
    • 这个脚本已经被编写为递归复制文件,带有 xcopy /E 参数,甚至复制空目录(如果需要,可以随意更改。)
    • 我添加了测试的输出,显示了递归文件副本。如果您喜欢这种单线解决方案,请不要忘记投票。
    • 我一定是做错了什么。它现在完美运行!非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多