Bat файл получить имя переменной имени файла - PullRequest
0 голосов
/ 09 мая 2019

Каждый день в каталоге на локальном компьютере пользователя создается много файлов с такой структурой имен:

8-05-21_09-05-2019_wolverine_WCALL1-010
hour_date_username_computername 

Проблема: Мне нужен командный файл для запуска robocopy для копирования файлов, сгенерированных только за день. как это:

robocopy  09-05-2019 \\server\files\8-05-21_09-05-2019_wolverine_WCALL1-010

Итак, как я могу получить дату в середине имени файла?

Ответы [ 3 ]

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

Используя из вашего , вы можете выбирать только файлы, измененные за последние 24 часа, используя параметр /MaxAge со значением 1:

@RoboCopy "SourceDirectory" "DestinationDirectory" /MaxAge:1

Если вам нужно только для файлов, измененных сегодня, вам может быть проще выполнить задачу, используя из вашего :

@PowerShell -NoP "$d=$(Get-Date).ToString('yyyyMMdd');RoboCopy "SourceDirectory" "DestinationDirectory" /MaxAge:$d"
0 голосов
/ 09 мая 2019

Получите дату независимо от локали / пользовательских настроек (здесь с PowerShell)
Используйте подстановочные знаки вокруг даты, чтобы выбрать только файлы, содержащие эту дату.

@Echo off
for /f %%A in ('powershell -NoP -c "get-date -f dd-MM-yyyy"') do set "dt=%%A"
RoboCopy "x:\sourcepath" "\\server\files" "*_%dt%_*"
0 голосов
/ 09 мая 2019

Если вы хотите специально работать только с именем, вот один из способов.

@echo off
set day=0
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 "modD=%dd%-%mm%-%yyyy%
for /f %%i in ('dir /b /a-d ^| findstr "_%modD%"') do (
    robocopy "source" "destination" %%~i
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...