繁体   English   中英

如何将文件移动到Windows命令行中文件创建日期的目录中?

[英]How do I move files to a directory that's the create date of the files in Windows Command Line?

我儿子在圣诞节收到了VTech儿童智能手表。 该软件不会自动下载任何图片,视频或录音。 它只是显示为“我的电脑”下的驱动器。 我想每天晚上清理手表,并使用相同的文件夹结构将文件合并到我们其他家庭照片中。 我可以通过剪切粘贴来手动完成此操作,但我想直接连接手表并运行批处理脚本。

源文件位于E:\\DCIM\\100VTECH 文件夹的目标目录为C:\\Users\\Dan\\OneDrive\\Watch

因此,例如,如果这些是当前文件:

E:\DCIM\100VTECH\100_0001.JPG - Created 12/25/2014
E:\DCIM\100VTECH\100_0050.AVI - Created 12/26/2014
E:\DCIM\100VTECH\100_0053.JPG - Created 12/26/2014

我希望这是结果:

C:\Users\Dan\OneDrive\Watch\2014-12-25\100_0001.JPG
C:\Users\Dan\OneDrive\Watch\2014-12-26\100_0050.AVI
C:\Users\Dan\OneDrive\Watch\2014-12-26\100_0053.JPG
E:\DCIM\100VTECH\ = empty

到目前为止,我已经使用了这些页面中的信息来创建脚本,但是现在我陷入了困境。 http://itproguru.com/expert/2013/02/how-to-create-filename-variable-with-date-and-time-from-command-cmd-batch-file-for-use-in-creating- unique-filename / 如何使用批处理作业将文件“创建日期”添加到目录中的所有文件中?

这是我到目前为止的内容:

@echo off &setlocal disableDelayedExpansion
set "startfolder=E:\DCIM\100VTECH"
set Stamp=booger
cd /d "%startfolder%"
for %%a in (*) do (
    echo --------------------------------------------------
    echo FileVar IS %%a
    for /f "delims=." %%b in ('wmic datafile where "name='%startfolder:\=\\%\\%%~a'" get lastmodified^|find "."') do (
        echo Temp Is %%~b
        set Stamp=%%b
        echo Stamp IS %Stamp%
        set YearVar=%Stamp:0,4%
        echo YearVar IS %YearVar%
        echo ren "%startfolder%\%%~a" "%%~b.txt"
    )
)

我感觉自己接近了,但是我不知道如何解析%% b字符串(这是完整的日期和时间戳,例如“ 20141225105524”。当我尝试设置%Stamp%和%YearVar%时,他们没有设置!

@echo off
setlocal ENableDelayedExpansion
set "startfolder=E:\DCIM\100VTECH"
set Stamp=booger
cd /d "%startfolder%"
for %%a in (*) do (
    echo --------------------------------------------------
    echo FileVar IS %%a
    for /f "delims=." %%b in ('wmic datafile where "name='%startfolder:\=\\%\\%%~a'" get lastmodified^|find "."') do (
        echo Temp Is %%~b
        set "Stamp=%%b"
        echo Stamp IS !Stamp!
        set "YearVar=!Stamp:0,4!"
        echo YearVar IS !YearVar!
        echo ren "%startfolder%\%%~a" "%%~b.txt"

        set "newfol=C:\Users\Dan\OneDrive\Watch\!stamp:~0,4!-!stamp:~4,2!-!stamp:~6,2!"
        echo MD "!newfol!" 2>nul
        echo COPY "%startfolder%\%%~a" "!newfol!\%%~nxa"
    )
)

主要问题:访问(a parenthesised series of statements)块修改的值(a parenthesised series of statements) -类似于for...(block)您需要ENabledelayedexpansion并使用!var!访问值!var!

注意还要使用set "var=value" -这确保了散乱的空格不包括在分配的值中。 如果要分配给变量的字符串的 te值是全数字的,并且不以 0 开头,set /a var=value就可以了(注意-不带引号)。

这应该使您入门。

我添加到循环中的额外内容应该

首先将newfol设置为目标名称格式yyyy-mm-dd

然后(回显)创建一个新的目标目录。 2>nul抑制“已经存在”错误消息。

然后(回显)复制文件。 ~ NXA means "get name and extension from filename %%了`

我建议您不要尝试在此过程中删除源文件(执行此操作的代码为del "%startfolder%\\%%~a" ),因为进行复制和自动删除可能会出现问题会破坏原件。 if not errorlevel 1 del "%startfolder%\\%%~a"安全措施将是(复制后) if not errorlevel 1 del "%startfolder%\\%%~a"但是没有什么比手动检查if not errorlevel 1 del "%startfolder%\\%%~a" -只需运行另一个批处理文件...

我花了更多时间研究和尝试一些东西,这是工作代码:

@echo off
setlocal enableDelayedExpansion
set "startfolder=E:\DCIM\100VTECH"
set "targetfolder=C:\Users\Dan\OneDrive\Watch"
set Stamp=booger
cd /d "%startfolder%"
for %%a in (*) do (
    echo --------------------------------------------------
    echo FileVar IS %%a
    for /f "delims=." %%b in ('wmic datafile where "name='%startfolder:\=\\%\\%%~a'" get lastmodified^|find "."') do (
        echo Temp Is %%~b
        set Stamp=%%~b
        echo Stamp IS !Stamp!
        set YearVar=!Stamp:~0,4!
        echo YearVar IS !YearVar!
        set MonthVar=!Stamp:~4,2!
        echo MonthVar IS !MonthVar!
        set DayVar=!Stamp:~6,2!
        echo DayVar IS !DayVar!
        ROBOCOPY "%startfolder%" "%targetfolder%\!YearVar!-!MonthVar!-!DayVar!" %%a
        echo ROBOCOPY "%startfolder%" "%targetfolder%\!YearVar!-!MonthVar!-!DayVar!" %%a
    )
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM