Dis箝as: Previously我需要比较“上次修改”的日期,但是5分钟前,我得到了一个新的要求,我需要与文件名上的日期进行比较,因为我解释了自己的情况。
假设我有两个文件夹:
FolderData将接收文件名,如果不指定日期,该文件名将等于:
如果我今天运行.bat文件,,,我需要只将 SYS_PURCHASES_20170618.xls复制到FolderTemp。这必须通过从文件名(20170618)中获取最后8个字符并检查它是否与TODAYDATE-1匹配来实现。
这在批处理文件中是可能的吗?如果是的话,如何实现?
如果Windows PowerShell(6.1)在以下几个步骤之后也执行了这些步骤,也可以在上接受答案:
move /y) --我相信在执行步骤2时可以这样做,不需要第三个文件夹。发布于 2017-06-19 21:12:28
只要脚本不是在闰年的3月1日运行,FolderData中所有与“昨天”对应的最后数字的文件将是
我的系统使用DDMMYYYY格式。交换前两个变量的值,将其设置为MMDDYYYY。
setlocal enabledelayedexpansion
set day=%date:~,2%
set month=%date:~3,2%
set year=%date:~-4%
echo.%day%|findstr /r /b "0">nul&&set day=%day:~1%
echo.%month%|findstr /r /b "0">nul&&set month=%month:~1%
set /a day-=5
if %day% lss 1 (
set /a day+=30
set /a month-=1
if !month!==2 (set /a day-=2
set /a leap=year%%4
if !leap!==0 set day+=1
)
for /l %%# in (1 2 7) do if %month%==%%# set /a day+=1
for %%# in (8 10 12) do if %month%==%%# set /a day+=1
if !month!==0 (
set month=12
set /a year-=1
)
)
set day=0%day%
set month=0%month%
for %%# in (C:\FolderData\*) do (
set name=%%~n#
if "!name:~-8!"=="%year%%month:~-2%%day:~-2%" (
copy "%%#" "C:\FolderTemp\!name:~,-9!%%~x#"
)
)如果我误解了什么,请告诉我。
编辑:修改了脚本,以说明可以追溯到多天前。
发布于 2017-06-19 23:16:27
使用下面的powershell脚本folder2是不必要的,您没有命名folder3,所以请根据您的环境进行调整。
$Folder1 = "C:\Test\2017\06\20"
$Folder3 = "C:\Test\2017\06\20\Destination"
$YesterDay = (Get-Date).AddDays(-1).ToString('yyyyMMdd')
Get-ChildItem -Path $Folder1 -Filter "SYS_PURCHASES_$YesterDay.*"|Where{ !$_.PSisContainer}|
Copy-Item -Destination {Join-Path $Folder3 (($($_.BaseName) -replace '_\d{8}$')+$_.Extension)} -whatif上述脚本的原始输出仅插入行中断
PS C:\test\2017\06\20> ls
Directory: C:\test\2017\06\20
Mode LastWriteTime Length Name
---- ------------- ------ ----
d----- 06/20/2017 18:13 Destination
-a---- 06/20/2017 18:01 1044 SO_44639321.ps1
-a---- 06/20/2017 00:56 24 SYS_PURCHASES_20170617.xls
-a---- 06/20/2017 00:56 24 SYS_PURCHASES_20170618.xls
-a---- 06/20/2017 01:07 24 SYS_PURCHASES_20170619.txt
-a---- 06/20/2017 00:56 24 SYS_PURCHASES_20170619.xls
PS C:\test\2017\06\20> .\SO_44639321.ps1
What if: Performing the operation "Copy File" on target
"Item: C:\Test\2017\06\20\SYS_PURCHASES_20170619.txt Destination: C:\Test\2017\06\20\Destination\SYS_PURCHASES.txt".
What if: Performing the operation "Copy File" on target
"Item: C:\Test\2017\06\20\SYS_PURCHASES_20170619.xls Destination: C:\Test\2017\06\20\Destination\SYS_PURCHASES.xls".
PS C:\test\2017\06\20> type .\SO_44639321.ps1如果输出在您的系统上看起来是对的,请删除最后一行末尾的-whatif参数。
发布于 2017-06-20 16:59:55
一种组合批处理/PowerShell方法。
用于日期计算的Powershell和其余的纯批处理
@Echo Off&Setlocal EnableDelayedExpansion
Set "Folder1=C:\Test\2017\06\20"
Set "Folder3=C:\Test\2017\06\20\Destination"
For /f "usebackq delims=" %%A in (
`Powershell -NonI -Nop -Com "(Get-Date).AddDays(-1).ToString('yyyyMMdd')"`
) Do Set YesterDay=%%A
For /F "Delims=" %%A in (
'Dir /B/A-D "%Folder1%\*_%YesterDay%.*" '
) Do (
Set "File=%%~nA"
Set "File=!File:_%YesterDay%=!"
Echo Copy "%%~fA" "%Folder3%\!File!%%~xA"
)样本输出
> SO_44639321.cmd
Copy "C:\Test\2017\06\20\SYS_PURCHASES_20170619.txt" "C:\Test\2017\06\20\Destination\SYS_PURCHASES.txt"
Copy "C:\Test\2017\06\20\SYS_PURCHASES_20170619.xls" "C:\Test\2017\06\20\Destination\SYS_PURCHASES.xls"如果输出看起来没有问题,请删除复制前面的回波。
https://stackoverflow.com/questions/44639321
复制相似问题