【问题标题】:store yesterdays date in yyyymmdd format into a variable将昨天的日期以 yyyymmdd 格式存储到变量中
【发布时间】:2019-05-02 05:01:46
【问题描述】:

我有一个名为 yyyymmddFile1.txt 的文件,其中以特定格式添加了日期前缀。

我需要将该文件从一个位置复制到另一个位置,并且我需要选择今天和昨天的文件

今天,我写了

SET TODAY=%date:~10,4%%date:~4,2%%date:~7,2%

SET MAINPATH=D:\%TODAY%File1.txt
if exist %MAINPATH% (
COPY D:\%TODAY%File1.txt D:\NDM\InFileQueue\%TODAY%File1.txt
)

所以,这会将文件名设置为 20190502File1.txt

但我不知道如何将昨天的日期作为变量传递。我需要做这样的事情 -

SET YESTERDAY= ??

SET MAINPATH=D:\%YESTERDAY%File1.txt
if exist %MAINPATH% (
COPY D:\%YESTERDAY%File1.txt D:\NDM\InFileQueue\%YESTERDAY%File1.txt
)

【问题讨论】:

标签: windows batch-file cmd


【解决方案1】:

您可以合并vbs 并获得正确的日期格式。在这里您只需更改set day=-1 的值即可切换要从今天的日期删除的天数。

@echo off
set day=-1
echo >"%temp%\%~n0.vbs" s=DateAdd("d",%day%,now) : d=weekday(s)
echo>>"%temp%\%~n0.vbs" WScript.Echo year(s)^& right(100+month(s),2)^& right(100+day(s),2)
for /f %%a in ('cscript /nologo "%temp%\%~n0.vbs"') do set "result=%%a"
del "%temp%\%~n0.vbs"
set "yyyy=%result:~0,4%"
set "mm=%result:~4,2%"
set "dd=%result:~6,2%"
set "final=%yyyy%%mm%%dd%"
echo Just doing an echo to screen of %final% for testing.
set "MAINPATH=D:\%final%File1.txt"
if exist %MAINPATH% (
    copy D:\%final%File1.txt D:\NDM\InFileQueue\%final%File1.txt
)

【讨论】:

    【解决方案2】:

    稍微扩展一下我的评论……

    对于今天和昨天的文件,

    @Set "Src=D:\."
    @Set "Dst=D:\NDM\InFileQueue"
    @Set "Ext=.txt"
    @RoboCopy "%Src%" "%Dst%" "*%Ext%" /MaxAge:2 > Nul
    

    或者作为来自.exe 或 的单个命令,(如果您愿意,可以在行前加上@ 以关闭其echoing)

    RoboCopy "D:\." "D:\NDM\InFileQueue" "*.txt" /MaxAge:2 > Nul
    

    仅适用于昨天的文件,(忽略今天)

    @Set "Src=D:\."
    @Set "Dst=D:\NDM\InFileQueue"
    @Set "Ext=.txt"
    @RoboCopy "%Src%" "%Dst%" "*%Ext%" /MaxAge:2 /MinAge:1 > Nul
    

    或者作为来自.exe 或 的单个命令,(如果您愿意,可以在行前加上@ 以关闭其echoing)

    RoboCopy "D:\." "D:\NDM\InFileQueue" "*.txt" /MaxAge:2 /MinAge:1 > Nul
    

    您会注意到有一个奇怪之处,D:\.RoboCopy 不喜欢源路径或目标路径以尾部反斜杠结尾,因此当其中一个是驱动器的根时,例如D:\,需要加句号,(不能用D:。非根驱动器源和目标将简单地使用我在上面的示例中为%Dst% 提供的路径。

    【讨论】:

      【解决方案3】:

      另一种方法是使用 PowerShell。如果您对正确复制文件感到满意,请移除 -WhatIf 开关。

      === get2files.ps1

      $sourcedir = 'C:/the/original/directory'
      $destinationdir = 'C:/the/new/directory'
      $filetoday = (Join-Path -Path $sourcedir -ChildPath (Get-Date -Format yyyyMMdd)) + 'File1.txt'
      $fileyesterday = (Join-Path -Path $sourcedir -ChildPath (Get-Date (Get-Date).AddDays(-1) -Format yyyyMMdd)) + 'File1.txt'
      if (Test-Path -Path $filetoday) { Copy-Item -Path $filetoday -Destination 'C:/the/new/directory' -WhatIf }
      if (Test-Path -Path $fileyesterday) { Copy-Item -Path $filetoday -Destination 'C:/the/new/directory' -WhatIf}
      

      === get2files.bat

      powershell -NoLogo -NoProfile -File "%~dp0get2files.ps1"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-12-15
        • 2012-01-08
        • 1970-01-01
        • 2020-04-26
        相关资源
        最近更新 更多