用于删除字符串中重复单词的窗口批处理/DOS脚本[关闭]

Posted

技术标签:

【中文标题】用于删除字符串中重复单词的窗口批处理/DOS脚本[关闭]【英文标题】:Window batch / DOS script to remove duplicate words in a string [closed] 【发布时间】:2016-05-30 22:41:22 【问题描述】:

任何人都可以帮助我使用窗口批处理/ DOS 脚本来删除字符串。

如果字符串是 -

测试1测试2测试1测试3测试2测试3

我需要一个脚本来显示为

测试1测试2测试3

【问题讨论】:

你尝试了什么?请发布您的示例 嗯...你还在使用 80 年代/90 年代的 DOS 吗?你的意思是CMD - Command prompt 【参考方案1】:

同样的方法,你可以手动完成:获取每个元素,检查它是否已经在输出中,如果没有,追加它:

@echo off
setlocal enabledelayedexpansion
set "string=test1 test2 test1 test3 test2 test3"
set "newstring="
for %%i in (%string%) do (
  echo !newstring!|findstr /i "\<%%i\>" >nul || set "newstring=!newstring! %%i"
)
echo %newstring:~1%

(注意:如果要区分大小写,请删除/i

编辑以处理完整的单词而不是(可能的)子字符串。

【讨论】:

如果一个词包含在另一个词中,你的方法会失败;例如:set "string=test1 test2 tes test1 test3 test test2 test3"tes 也没有 test 单词被插入到输出中 我认为这很容易通过使用 findstr /i "\&lt;%%i\&gt;" 添加单词边界来解决。【参考方案2】:

有几种方法可以做到这一点;例如:

@echo off
setlocal EnableDelayedExpansion

set "in=test1 test2 tes test1 test3 test test2 test3"


rem 1- Insert the word if it is not in the output already
set "out= "
for %%a in (%in%) do (
   if "!out: %%a =!" equ "!out!" set "out=!out!%%a "
)
echo "%out:~1,-1%"


rem 2- Remove each word from output, then insert it again
echo/
set "out= "
for %%a in (%in%) do (
   set "out=!out: %%a = !"
   set "out=!out!%%a "
)
echo "%out:~1,-1%"

【讨论】:

以上是关于用于删除字符串中重复单词的窗口批处理/DOS脚本[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

删除字符串中出现的重复单词

如何使批处理BAT文件在后台运行而不显示DOS窗口

dos 下如何删除某个目录下的创建时间为5天前的文件夹?用批处理文件

Leetcode(无重复字符的最长子串;删除排序链表中的重复元素II;加一;最后一个单词的长度;相同的树)

MS Dos Batch删除目录中的旧文件[重复]

用于检查值是否在列表中不适用于集合的逻辑