сохранить дату вчерашнего дня в формате ггггммдд в переменную - PullRequest
1 голос
/ 02 мая 2019

У меня есть файл с именем 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
)

Ответы [ 3 ]

0 голосов
/ 02 мая 2019

Чтобы немного расширить мой комментарий…

Для файлов с сегодняшнего и вчерашнего дня в виде :

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

Или как одна командаиз .exe или , (перед строкой введите @, чтобы отключить ее echo ing, если хотите) :

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 или , (перед строкой введите @, чтобы отключить ее echo ing, если хотите) :

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

Вы заметите, что есть одна странность, D:\., RoboCopy не нравится, когда исходные или целевые пути заканчиваются завершающим обратным слешем, поэтому, когда один из них являетсякорень диска, например, D:\, необходимо добавить точку, (вы не можете использовать D:) .Не корневые источники и места назначения просто использовали бы путь, как я указал в примере выше для %Dst%.

0 голосов
/ 02 мая 2019

Другой способ - использовать 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"
0 голосов
/ 02 мая 2019

Вы можете включить 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
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...