Как удалить имена из списка в пакете - PullRequest
0 голосов
/ 31 октября 2019

Я использую Windows Bath, у меня есть список имен, к которым я могу добавить, но я не знаю, как удалить имя из списка.

Пока мой код:

@echo off
setlocal enabledelayedexpansion
set allchoices=123456789
set "names=Bob,Steven,Harry"
set amount=6 ::max limit of list
set list=0

:start
::echoes a list of all names in the list
for /l %%i in (1; 1; %amount%) do (
    call :sub %%i
)
goto check

:sub
for /f "tokens=%1 delims=," %%a in ("%names%") do (
    echo %%i. %%a
    set /a list=list+1
)
goto :eof

:check
::Remove a name from the list
choice /c !allchoices:~0,%list%! /m "What name do you want to remove?"
if errorlevel 3 (
    for /f "tokens=3 delims=," %%a in ("%names%") do (
        echo you have choosen to remove %%a
        ::remove third name in the list
        goto start
    )
)
if errorlevel 2 ::remove second name in the list
if errorlevel 1 ::remove first name in the list

Я пытался использовать del, но получается удалить файл в вашей папке. Я попытался переименовать определенное имя, используя set name[%%a]="", но это ничего не сделало. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 31 октября 2019

Посмотрите на этот пример. Есть много способов.

@echo off
setlocal enabledelayedexpansion
set names="Bob","Steven","Harry"
for %%i in (%names%) do (
    set /a num+=1
    set "!num!=%%~i"
)
for /l %%a in (1,1,%num%) do (
    set choices=!choices!%%a
    echo !num!.!%%a!
)
choice /c 123 /m "please select name to remove"
for /l %%a in (1,1,%num%) do if not "!%%a!"=="!%errorlevel%!" set new_names=!new_names! !%%~a!
echo %new_names:~1%

Это можно сделать и без последнего цикла for ... но я выбрал его.

1 голос
/ 31 октября 2019

Вот пример кода, который вы можете запустить, а затем попытаться понять, надеюсь, это поможет, а не смущает:

@Echo Off
SetLocal EnableDelayedExpansion
For /F "Delims==" %%A In ('Set # 2^>NUL') Do Set "%%A="
Set "i=0"
For /F "Delims=:" %%A In ('FindStr "^::" "%~f0" 2^>NUL') Do (
    Set /A i+=1
    Set "#!i!=%%A"
    Echo= !i!. %%A
)

:Ask
Set # 1>NUL 2>&1
If ErrorLevel 1 Echo= Empty names list&Timeout 3 1>NUL&Exit /B
Echo=&Set /P "Option= Choose a name to remove>"
Set #|Findstr "^#%Option%=" 1>NUL||GoTo :Ask
Set "Name=!#%Option%!"
Echo= You've chosen to remove "%Name%"
Timeout 2 1>NUL
Set "#%Option%="
ClS
For /F "Tokens=1*Delims=#=" %%A In ('Set # 2^>NUL') Do Echo= %%A. %%B
GoTo Ask

::Alan
::Beth
::Cleo
::Dale
::Eric
::Faye
::Greg
::Hugh
::Inga

Важное примечание:
Перед сохранением вышеуказанного содержимого в виде командного сценария Windows убедитесь, что в конце есть строка возврата (пустая строка).

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