【问题标题】:How do I move files to a directory that's the create date of the files in Windows Command Line?如何将文件移动到 Windows 命令行中文件的创建日期的目录?
【发布时间】:2014-12-27 05:36:33
【问题描述】:

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

源文件位于 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/ How to use batch job to add the file "create date" into all the files in a directory?

这是我目前所拥有的:

@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%,他们没有设置!

【问题讨论】:

    标签: windows batch-file command-line windows-7


    【解决方案1】:
    @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) 修改的值 - 例如 for...(block),您需要 ENabledelayedexpansion 并使用 !var! 访问这些值

    还要注意set "var=value" 的使用——这样可以确保分配的值中不包含杂散空格。 提供要分配给变量的 字符串 的值是全数字 并且不开始 0 然后set /a var=value 很好(注意 - 没有引号)。

    这应该让你开始。

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      @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
          )
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        • 2012-06-16
        • 1970-01-01
        • 2019-08-15
        • 1970-01-01
        相关资源
        最近更新 更多