[英]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.