Как использовать параметр 2 в цикле for, вложенном в пакетный файл? - PullRequest
0 голосов
/ 26 апреля 2019

Я не смог использовать второй параметр (%%b) в первом цикле for для сравнения (if !count! GTR %%b) во втором цикле for, надеясь, что эксперты помогут, извините за мой английский нехорошо.

Файл text1.txt

    #       #
#Employee*.PDF,3
School*.PDF,4
Family*.PDF,5

Папка c:\user\text

xxxxxxxxx.pdf
Employee1.pdf
Employee3.pdf
Employee2.pdf
Employee4.pdf
Employee5.pdf
Employee6.pdf
Employee7.pdf
School1.pdf
School3.pdf
School2.pdf
School4.pdf
School5.pdf
School6.pdf
School7.pdf

Общий код:

@Echo off
@SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=, tokens=1,2 eol=#" %%a in ('Type text1.txt') do (
    set /a count=0
    for /f %%x in ('dir C:\user\text\%%a /b') do (
        set /a count+=1
        if !count! GTR %%b ( 
            del "C:\user\text\%%x"
        )
    )
)

Я не могу использовать %%b во втором цикле for. вывод после прогона All files are deleted.

но я просто хочу удалить:

Employee4.pdf
Employee5.pdf
Employee6.pdf
Employee7.pdf
School5.pdf
School6.pdf
School7.pdf

Помогите мне, пожалуйста!

Я пытался ... добавить set /a flag=%%b и изменить сравнительные условия = if !count! GTR !flag!

 for /f "delims=, tokens=1,2 eol=#" %%a in ('Type text1.txt') do (
     set /a count=0
     set /a flag=%%b
     for /f %%x in ('dir C:\user\text\%%a /b') do (
         set /a count+=1
         if !count! GTR !flag! ( 
             del "C:\user\text\%%x"
         )
    )
)

но вывод !flag! = 5, равна его окончательному значению Family*.PDF,5.

Ответы [ 2 ]

2 голосов
/ 26 апреля 2019

Ваш первый код работает нормально (я добавил немного кода для добавления демонстрационных файлов и небольшое изменение в команде dir для соответствия среде - адаптируйтесь к вашим потребностям):

@echo off
setlocal enabledelayedexpansion

REM create test environment:
for /l %%a in (1,1,7) do break>School%%a.pdf
for /l %%a in (1,1,7) do break>Family%%a.pdf
dir /b *.pdf
echo ---------
type text1.txt
echo ---------
pause


for /f "delims=, tokens=1,2 eol=#" %%a in ('Type text1.txt') do (
    set /a count=0
    for /f %%x in ('dir %~dp0%%a /b') do (
        set /a count+=1
        if !count! GEQ %%b echo "%%~fx"
    )
)

Вывод:

Family1.pdf
Family2.pdf
Family3.pdf
Family4.pdf
Family5.pdf
Family6.pdf
Family7.pdf
School1.pdf
School2.pdf
School3.pdf
School4.pdf
School5.pdf
School6.pdf
School7.pdf
---------
#       #
#Employee*.PDF,3
School*.PDF,4
Family*.PDF,5
---------
Drücken Sie eine beliebige Taste . . . 
"D:\tmp\test\School4.pdf"
"D:\tmp\test\School5.pdf"
"D:\tmp\test\School6.pdf"
"D:\tmp\test\School7.pdf"
"D:\tmp\test\Family5.pdf"
"D:\tmp\test\Family6.pdf"
"D:\tmp\test\Family7.pdf"

О да - и я изменил GTR на GEQ в соответствии с вашим примером.

1 голос
/ 26 апреля 2019

Команде dir требуется подстановочный знак после %%a

for /f %%x in ('dir /b "C:\user\text\%%a*"') do (

Также %%b, считываемое из text1.txt, - это не просто число, а добавленное расширение .pdf.

Либо используйте

  • if !count! GTR %%~nb для удаления добавочного номера, либо
  • измените test1.txt, чтобы ввести еще одну запятую между номером и добавочным номером.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...