批处理脚本使用时间戳移动文件

时间:2014-07-03 20:48:12

标签: batch-file scripting move

所以基本上我有一个文件系统C:\ Test \ BaseLine。在BaseLine文件夹下我有很多文件夹,它可以是一个文件夹或15个文件夹,在这些文件夹中是图像文件。我想将INSIDE那些不包括BaseLine文件夹的文件夹中的所有图像复制到另一个位置,即每个图像末尾的C:\ Test \ Achieve Images with Date戳记为03-07-2014。

例如,我将拥有这样的文件夹系统:
BaseLine - 1.jpg,2.jpg
- > [Folder 123] - 3.jpg,4.jpg
- > [文件夹321] - 5.jpg,6.jpg

在我的脚本结束时,我应该让我的C:\ Test \ Achieve图像具有这样的图像:
实现图像 - 3_03-07-2014.jpg,4_03-07-2014.jpg,5_03-07-2014.jpg,6_03-07-2014.jpg

请注意它不包含任何BaseLine主文件夹图像。

到目前为止,我有一个这样的脚本:

cd /d "C:\Test\BaseLine\" @SET DATE_FOLDER=%date:~7,2%-%date:~4,2%-%date:~10,4% SET "ACHIEVE_DIR=C:\Test\Master Achieve" for /d %%a in ("*") do xcopy "%%a\*.*" "%ACHIEVE_DIR%\" /s/h/e/k/f/c/y
PS:这段代码是在[user] foxidrive的帮助下完成的。再次感谢伙计,我有另一个问题!!

这可以工作,但不会将时间戳附加到每个图像文件的末尾 谢谢!

3 个答案:

答案 0 :(得分:1)

您无法使用xcopy执行此操作,但正如您在评论中所述,这会在复制前重命名文件。

此代码的前四行将为您提供XP Pro及更高版本中可靠的YY DD MM YYYY HH Min Sec变量。

@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:\Test\BaseLine\"
SET "ACHIEVE_DIR=C:\Test\Master Achieve" 
md "%ACHIEVE_DIR%" 2>nul

for /d %%a in (*) do (
for /r %%b in ("%%a\*.jpg") do ren "%%~b" "%%~nb - %DATE_FOLDER%%%~xb"
xcopy "%%a\*.jpg" "%ACHIEVE_DIR%\" /s/h/e/k/f/c/y
)
pause

修改代码以将所有*-tasty.jpg个文件移至%ACHIEVE_DIR%并对其进行日期戳记,然后删除C:\Test\BaseLine\下包含所有剩余文件的原始文件夹但离开C:\Test\BaseLine\内的文件完好无损。

@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:\Test\BaseLine\"
SET "ACHIEVE_DIR=C:\Test\Master Achieve" 
md "%ACHIEVE_DIR%" 2>nul

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

答案 1 :(得分:0)

这有效 -

@echo off
for /f "skip=1 delims=." %%i in ('wmic OS Get localdatetime') do set ts=%%i
set dt=%ts:~6,2%-%ts:~4,2%-%ts:~0,4%

set workdir=D:\test\baseline\
set newdir=D:\test\Achieve\

cd %workdir%

for /f "delims=" %%i in ('dir /b /s *.jpg') do call :search "%%i"
goto :eof

:search
set filepath=%~f1
set dirpath=%~dp1
set filename=%~n1
set fileextn=%~x1
if "%dirpath%" EQU "%workdir%" goto :eof
copy /y "%filepath%" %newdir%\%filename%_%dt%%fileextn% >nul 2>&1

:eof

测试输出 -

D:\>dir "d:\test\baseline", "d:\test\baseline\Folder 123", "d:\test\baseline\Folder 321"
 Volume in drive D is New Volume
 Volume Serial Number is B04C-AB59

 Directory of d:\test\baseline

23/07/2014  21:24    <DIR>          .
23/07/2014  21:24    <DIR>          ..
23/07/2014  20:35                 2 1.jpg
23/07/2014  20:35                 2 2.jpg
23/07/2014  20:36    <DIR>          Folder 123
23/07/2014  20:37    <DIR>          Folder 321
               2 File(s)              4 bytes

 Directory of d:\test\baseline\Folder 123

23/07/2014  20:36    <DIR>          .
23/07/2014  20:36    <DIR>          ..
23/07/2014  20:36                 2 3.jpg
23/07/2014  20:36                 2 4.jpg
               2 File(s)              4 bytes

 Directory of d:\test\baseline\Folder 321

23/07/2014  20:37    <DIR>          .
23/07/2014  20:37    <DIR>          ..
23/07/2014  20:37                 2 5.jpg
23/07/2014  20:37                 2 6.jpg
               2 File(s)              4 bytes
               2 Dir(s)   7,037,329,408 bytes free

D:\>draft.bat

D:\test\baseline>cd\

D:\>dir d:\test\Achieve
 Volume in drive D is New Volume
 Volume Serial Number is B04C-AB59

 Directory of d:\test\Achieve

23/07/2014  21:24    <DIR>          .
23/07/2014  21:24    <DIR>          ..
23/07/2014  20:36                 2 3_23-07-2014.jpg
23/07/2014  20:36                 2 4_23-07-2014.jpg
23/07/2014  20:37                 2 5_23-07-2014.jpg
23/07/2014  20:37                 2 6_23-07-2014.jpg
               4 File(s)              8 bytes
               2 Dir(s)   7,037,329,408 bytes free

干杯, ģ

编辑 - 这是基于您的原始问题。我还没有看到对另一个答案的评论。如果您需要更改,请告诉我。

答案 2 :(得分:0)

在运行draft.bat之前

D:\>dir "d:\test\baseline", "d:\test\baseline\Folder 123", "d:\test\baseline\Folder 321"
Volume in drive D is New Volume
Volume Serial Number is B04C-AB59
 Directory of d:\test\baseline

23/07/2014  21:24    <DIR>          .
23/07/2014  21:24    <DIR>          ..
23/07/2014  20:35                 2 1.jpg
23/07/2014  20:35                 2 2.jpg
23/07/2014  20:36    <DIR>          Folder 123
23/07/2014  20:37    <DIR>          Folder 321
               2 File(s)              4 bytes

 Directory of d:\test\baseline\Folder 123

23/07/2014  20:36    <DIR>          .
23/07/2014  20:36    <DIR>          ..
23/07/2014  20:36                 2 3-tasty.jpg
23/07/2014  20:36                 2 3-not tasty.jpg
23/07/2014  20:36                 2 4-tasty.jpg
23/07/2014  20:36                 2 4-not tasty.jpg
               2 File(s)              4 bytes

 Directory of d:\test\baseline\Folder 321

23/07/2014  20:37    <DIR>          .
23/07/2014  20:37    <DIR>          ..
23/07/2014  20:37                 2 5-tasty.jpg
23/07/2014  20:37                 2 5-not tasty.jpg
23/07/2014  20:37                 2 6-tasty.jpg
23/07/2014  20:37                 2 6-not tasty.jpg
               2 File(s)              4 bytes
               2 Dir(s)   7,037,329,408 bytes free

D:\>draft.bat

D:\test\baseline>cd\

D:\>dir d:\test\Achieve
 Volume in drive D is New Volume
 Volume Serial Number is B04C-AB59

 Directory of d:\test\Achieve

23/07/2014  21:24    <DIR>          .
23/07/2014  21:24    <DIR>          ..
23/07/2014  20:36                 2 3_23-07-2014.jpg
23/07/2014  20:36                 2 4_23-07-2014.jpg
23/07/2014  20:37                 2 5_23-07-2014.jpg
23/07/2014  20:37                 2 6_23-07-2014.jpg
               4 File(s)              8 bytes
               2 Dir(s)   7,037,329,408 bytes free


 Directory of d:\test\baseline

23/07/2014  21:24    <DIR>          .
23/07/2014  21:24    <DIR>          ..
23/07/2014  20:35                 2 1.jpg
23/07/2014  20:35                 2 2.jpg
23/07/2014  20:35                 2 3.jpg
23/07/2014  20:35                 2 4.jpg
23/07/2014  20:35                 2 5.jpg
23/07/2014  20:35                 2 6.jpg
               2 File(s)              4 bytes

请注意baseline如何没有更多文件夹,因为它们在移动所有文件后都被删除了 non-tasty - &gt;没有non-tasty分机的基线
tasty - &gt;实现没有tasty但带有日期戳

我希望你现在能理解。 非常感谢