用于删除字符串中重复单词的窗口批处理/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 "\<%%i\>"
添加单词边界来解决。【参考方案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脚本[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
dos 下如何删除某个目录下的创建时间为5天前的文件夹?用批处理文件