Пакет: Как переместить файлы с индексом ниже, чем самый высокий - PullRequest
0 голосов
/ 21 января 2019

Я пытаюсь переместить из dir1 в dir2 файлы, индекс которых меньше, чем самый высокий индекс.

Я думал, что мне нужно было сделать простой цикл FOR, но у меня проблемы с REGEX для индекса, и у меня даже есть проблемы с поиском способа сравнить индекс между ними

То, что я попробовал на данный момент (ничего не делая):

FOR %%i IN (C:\path\TEST_BAT\*) DO (SET current_path=%%~ni
SET C|findstr /r "ind.{1}" %current_path%
ECHO %C%)

Представьте, что у вас есть набор:

  • 1234-5678-ind0-example.pdf
  • 1234-5678-ind0-example.avi
  • 1234-5678-ind0-example.swf
  • 1234-5678-пкШ-example.pdf
  • 1234-5678-пкШ-example.avi
  • 1234-5678-пкШ-example.swf
  • 1234-5678-indB-example.pdf
  • 1234-5678-indB-example.avi
  • 1234-5678-indB-example.swf

Я хочу запустить скрипт, который перемещает каждый файл в другой каталог, кроме тех, которые имеют имя файла indB в имени файла, потому что это самый высокий индекс на данный момент.

1 Ответ

0 голосов
/ 21 января 2019

Из моего понимания.Вы хотите переместить все файлы, кроме самого высокого индекса в примере ниже, на основе статуса ind#.

  • 1234-5678-ind0-example.swf - Переместить файл
  • 1234-5678-indA-example.swf - Переместить файл
  • 1234-5678-indB-example.swf - Не перемещать файл

Для моего решения мы будем извлекатьint# из имени файла, экспортируя их в файл, сортируя указанный файл, затем перемещая файлы, исключая самый высокий индекс.Для этого мы можем просто использовать find /V "indB", однако этот пакетный файл принимает динамические данные и создает решение.Для сравнения всегда потребуется 3'd delims в формате 1234-5678-ind0-example, что вам и нужно.

MoveButExcludeHighestIndex.bat:

@echo off
@setlocal enabledelayedexpansion

Rem | Configure Directories
Set "MainDirrectory=C:\folder"
Set "MoveToDirrectory=C:\new folder"

Rem | Get All Folders Locations In X Directory
for %%A in ("!MainDirrectory!\*") do (

    Rem | Get Each ind# From %%A
    for /f "tokens=3 delims=-" %%B in ("%%~nA") do (

        Rem Save Results To File
        Echo %%B>> SortNumbers.TEMP

    )
)

Rem | Sort TextFile - Script By dbenham
set "file=SortNumbers.TEMP"
>"%file%.new1" (
  for /f "usebackq tokens=*" %%A in ("%file%") do (
    set "n=000000000000000%%A"
    setlocal enableDelayedExpansion
    echo !n:~-15!
    endlocal
  )
)
>"%file%.new2" sort /r "%file%.new1"
>"%file%" (
  for /f "usebackq tokens=* delims=0" %%A in ("%file%.new2") do echo %%A
)
del "%file%.new?"

Rem | Grab Highest Index From TextFile
for /f "tokens=* delims=" %%A in ('Type SortNumbers.TEMP') do (
    set /a "count+=1"
    set "Line[!count!]=%%A"
)

Rem | Get All Folders Locations In X Directory
for %%A in ("!MainDirrectory!\*") do (

    Rem | Find Files Without Highest Index
    for /f "tokens=* delims=" %%B in ('Echo %%A^| find /V "!Line[1]!"') do (

        Rem | Move Files
        Set "CopyFile=%%B"
        Move "!CopyFile!" "!MoveToDirrectory!"

    )
)
del "SortNumbers.TEMP"
goto :EOF

Для получения справки по любой из команд выполните следующие действия:

  • call /?
  • set /?
  • for /?
  • if /?
  • find /?
  • и т. Д.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...