我有一个名为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
)
答案 0 :(得分:0)
您可以合并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
)
答案 1 :(得分:0)
为了进一步说明我的观点……
对于今天和昨天的batch-file文件:
@Set "Src=D:\."
@Set "Dst=D:\NDM\InFileQueue"
@Set "Ext=.txt"
@RoboCopy "%Src%" "%Dst%" "*%Ext%" /MaxAge:2 > Nul
或者作为来自cmd。exe或batch-file的单个命令,(如果您的计算机上有@
,则关闭行echo
希望):
RoboCopy "D:\." "D:\NDM\InFileQueue" "*.txt" /MaxAge:2 > Nul
对于仅昨天的文件,(忽略今天),作为batch-file:
@Set "Src=D:\."
@Set "Dst=D:\NDM\InFileQueue"
@Set "Ext=.txt"
@RoboCopy "%Src%" "%Dst%" "*%Ext%" /MaxAge:2 /MinAge:1 > Nul
或者作为来自cmd。exe或batch-file的单个命令,(如果您的计算机上有@
,则关闭行echo
希望):
RoboCopy "D:\." "D:\NDM\InFileQueue" "*.txt" /MaxAge:2 /MinAge:1 > Nul
您会注意到,有一个奇数,D:\.
,RoboCopy
不希望源路径或目标路径以结尾的反斜杠结尾,因此当其中一个是驱动器的根时,例如D:\
,必须添加句点(您不能使用D:
)。非根驱动器源和目标将仅使用上面示例中的%Dst%
路径。
答案 2 :(得分:0)
另一种方法是使用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"