Переместить 1000 файлов в папки, каждый пакет от 100 до 1 - PullRequest
0 голосов
/ 24 апреля 2020

Идея заключается в перемещении файлов в папки, например:

Имена файлов:

1.pdf,2.pdf,3.pdf.....1000.pdf

И результаты должны быть такими:

(1.pdf-100.pdf) To Folder 1
(101.pdf-200.pdf) To Folder 2
(201.pdf-300.pdf) To Folder 3
..

Этот код работает, но начинается с (0), а не (1)

    @echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.pdf) do (
    echo %%~na|FINDSTR /R /C:"^[0-9]*$" >nul 2>nul&&(
        set /a NumBas=%%~na/1000*1000
        set /a NumHaut=^(%%~na/1000*1000^)+999
        echo %%~a -^> !NumBas!-!NumHaut!
        IF NOT EXIST "!NumBas!-!NumHaut!" MD "!NumBas!-!NumHaut!"
        MOVE /Y "%%~a" "!NumBas!-!NumHaut!\%%~a" >nul
    )
)

Ответы [ 2 ]

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

Упрощенно:

@echo off
setlocal EnableDelayedExpansion

for %%a in (*.pdf) do (
   set /A "Num=(%%~Na-1)/100+1, NumBas=(Num-1)*100+1, NumHaut=Num*100"
   IF NOT EXIST "!NumBas!-!NumHaut!" MD "!NumBas!-!NumHaut!"
   MOVE /Y "%%~a" "!NumBas!-!NumHaut!\%%~a" >nul
)

Если вам нужны папки с более простыми именами «Папка 1», «Папка 2» и т. Д. c, просто используйте "Folder !Num!" и исключите переменные NumBas и NumHaut.

1 голос
/ 24 апреля 2020

Причина, по которой ваши вычисления не работают, заключается в том, что CLI не поддерживает плавающие точки.

Когда вы делаете:

set / a NumBas = %% ~ na / 1000 *1000* 1006 *

вы получаете десятичное значение. Я подозреваю, что вы пытаетесь воспользоваться этим, чтобы попытаться округлить значение. К сожалению, это не работает, потому что, как только вы делаете 1/1000 , это 0,0001 , который становится 0 , поэтому ваш NumBas становится нулевым при прохождении к следующей команде.

Я также заметил, что вы делите и умножаете на 1000 вместо 100. деление на 100 приведет (как только исправится) к тому, что ваши файлы будут отсортированы по тысячам:

1-1000
1001-2000
2001-3000

, а не на 100, как вы задали в своем вопросе, чтобы исправить это, просто измените 1000 на 100.

Теперь с плавающей запятой. Самый простой способ исправить это - проверить, если NumBas значение меньше 1 , и если оно есть, сделайте его 1

IF !NumBas! LSS 1 Set /a NumBas +=1

Этот скорректированный код должен привести к тому, что вы ' Вы ищете:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
for %%a in (*.txt) do (
    echo %%~na|FINDSTR /R /C:"^[0-9]*$" >nul 2>nul&&(
        set /a NumBas=%%~na/100*100
        IF !NumBas! LSS 1 Set /a NumBas +=1
        set /a NumHaut=!NumBas!+99
        echo %%~a -^> !NumBas!-!NumHaut!
        IF NOT EXIST "!NumBas!-!NumHaut!" MD "!NumBas!-!NumHaut!"
        MOVE /Y "%%~a" "!NumBas!-!NumHaut!\%%~a" >nul
    )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...