簡體   English   中英

如何從列表中批量刪除名稱

[英]How to remove names from a list in batch

我正在使用 windows 浴缸,我有一個可以添加的名稱列表,但我不知道如何從列表中刪除一個名稱。

到目前為止,我的代碼是:

@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]=""重命名特定名稱,但什么也沒做。 有任何想法嗎?

看看這個例子。 有很多方法。

@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 循環的情況下完成。但我選擇了它。

這是一些示例代碼,供您運行,然后嘗試理解,希望對您有所幫助而不是混淆:

@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 命令腳本之前,最后有一個回車行(空白行)。

@echo off &setlocal
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *ø*.txt') do (
    set "fname=%%~a"
    setlocal enabledelayedexpansion
    set "nname=!fname:ø=!"
    ren "!fname!" "!nname!"
    endlocal
)

 沒有出現在代碼頁 437 中,所以我不知道並行解決方案。 可能需要按照此答案中的指示更改代碼頁才能正確執行。 這是一個包含更改代碼頁的批處理文件的嘗試。

echo Ignore the error displayed below
@echo off &setlocal
chcp 65001>nul
cd /d c:\users\data
for /f "delims=" %%a in ('dir /b /a-d *Â*.txt') do (
    set "fname=%%~a"
    setlocal enabledelayedexpansion
    set "nname=!fname:Â=!"
    ren "!fname!" "!nname!"
    endlocal
)

將以上內容粘貼到記事本文件中,並使用編碼 UTF-8 保存。 必須包含腳本的第一行,因為批處理文件在初始處理 UTF-8 文件時會出錯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM