Измените сценарий Robocopy, чтобы прочитать число, добавленное к файлам в папке, добавить один и переименовать файл, который копируется - PullRequest
0 голосов
/ 25 апреля 2020

Итак, у меня есть очень простой сценарий, настроенный в планировщике задач для перемещения снимков экрана один раз в день из одной папки в другую. Это работает нормально, но когда снимки экрана сделаны, им автоматически присваивается имя в Steam, например, «Screenshot.png», «Screenshot 1.png», «Screenshot 2.png» et c в зависимости от того, сколько Папка. Таким образом, когда файлы очищаются в другую папку каждый день, каждый набор снимков экрана, сделанных в этот день, начинается снова с "Screenshot.png" и с этого момента go. В результате, когда они перемещаются, они будут либо перезаписывать, либо добавлять (1), либо что-то еще (не уверен, что, поскольку это еще не выполнялось!)

Так что я хочу изменить следующее Пакетный файл, чтобы найти наибольшее число в «Screenshot xxx.png» в папке назначения, добавьте его, переименуйте файл в исходной папке на этот номер, а затем выполните перемещение. Это должно вписаться в al oop, чтобы он мог go через все файлы в исходной папке.

@echo off

set X=1

set "source=C:\Users\Leigh\AppData\Local\Colossal Order\Cities_Skylines\Screenshots"

set "destination=D:\Leigh\Pictures\SkyLinesScreenshots"

robocopy "%source%" "%destination%" /mov

exit /b

Я проиграл и нашел скрипт, чтобы определить, каким должно быть следующее число, но не смог понять правильное выражение:

@echo off
    setlocal enableextensions disabledelayedexpansion

    setlocal enabledelayedexpansion
    set "nextFile=0" & for /f "delims=" %%a in ('
        findstr  /b /r /x 
                       /c:"\bScreenshot\b\s[0-9]+\.png"
    ') do if %%~na geq !nextFile! set /a "nextFile=%%~na+1"
    endlocal & set "nextFile=%nextFile%"

    echo Next file will be: %nextFile%

Если я получу это право, я объединю их вместе и решу проблему. Это довольно ясно, что нужно делать, так что кто-нибудь может дать мне правильное регулярное выражение, или даже больше, если они так сделают sh.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Windows 10 64-битный

Подсчет, приращение, перемещение с переименованием с помощью Windows 10 64-битный CMD, для, установки и перемещения.

Если источник скриншоты создаются без достаточного интервала, это произойдет:

screenshot cmd

Удалите echo, когда он работает.

CMD:

@rem Count, increment, move w/ rename with Windows 10 64-bit CMD, for, set, and move 
cmd /q /v /e
pushd "%HOME%\Pictures\SkyLinesScreenshots"
FOR /f %g in ('dir /a-d ^| find "File(s)"') do set z=%g
cd "%LOCALAPPDATA%\Colossal Order\Cities_Skylines\Screenshots"
FOR /f "delims=" %g in ('DIR /b /a-d') do (
   set /a z+=1 > nul
   echo move "%g" "%HOME%\Pictures\SkyLinesScreenshots\screenshot!z!.png" 
) 
popd
exit /b 

Скрипт:

@rem Count, increment, move w/ rename with Windows 10 64-bit CMD, for, set, and move
@echo off
setlocal enableextensions 
pushd "%HOME%\Pictures\SkyLinesScreenshots"
FOR /f %%g in ('dir /a-d ^| find "File(s)"') do set z=%%g
cd "%LOCALAPPDATA%\Colossal Order\Cities_Skylines\Screenshots"
FOR /f "delims=" %%g in ('DIR /b /a-d') do (
   set zname=%%g
   Call :increment 
) 
popd
exit /b 

:increment
set /a z+=1 > nul
echo move "%zname%" "%HOME%\Pictures\SkyLinesScreenshots\screenshot%z%.png" 
exit /b

Результаты:

screenshot cmd results

0 голосов
/ 25 апреля 2020

Windows 10 64-бит. PowerShell 5

Архивирование снимков экрана в папку меток времени (mmddyy) с использованием CMD и robocopy. Удалите архивы старше 14 дней с помощью PowerShell.

@echo off
setlocal enableextensions
set "source=C:\Users\Leigh\AppData\Local\Colossal Order\Cities_Skylines\Screenshots"
set "destination=D:\Leigh\Pictures\SkyLinesScreenshots\%DATE:~-10,2%%DATE:~-7,2%%DATE:~-4,2%"
robocopy "%source%" "%destination%" /mov
rem delete archives older than 14 days. Remove -whatif 
powershell -command "get-childitem "D:\Leigh\Pictures\SkyLinesScreenshots" |? {$_.psiscontainer -and $_.lastwritetime -lt (get-date).adddays(-14)} |% {remove-item $_ -recurse -force -whatif}"
exit /b

Вы можете настроить возрастной порог с помощью .adddays. Это в режиме WhatIf. Удалить -whatif, чтобы удалить папки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...