我需要从文件夹列表中删除重复的文件夹名称。如果有超过1个子文件夹,则会出现重复项。我最终得到了如下列表。我想摆脱任何有sub2文件夹的行。
folder1中\ SUB1
文件夹2 \ SUB1
文件夹2 \ SUB1 \ SUB2
folder3 \ sub1
以下代码可以工作,如果只有一个sub2 foldername,但它很尴尬 - 如果不止一个sub2则无望。必须有更好的方法。任何帮助非常感谢。
@Echo off
SETLOCAL EnableDelayedExpansion
:: Write the sub2 foldernames to a tmp file
For /f "tokens=3 delims=\" %%I IN (folderlist.txt) DO Echo %%I >>temp.tmp
:: Set var for each sub2 name in tmp file and
:: call routine to write lines that don't contain that name
For /f %%G in (temp.tmp) do (
Set findstring=%%G
CALL :FindDup
)
EXIT
:findDup
For /f %%H in ('Type folderlist.txt ^|Find "!findstring!" /v') Do (
Echo %%H >> NoDup.txt
)
exit /b
FWIW:我使用此命令生成列表,然后删除folder1,folder2等之前的路径
For /d %%G in (*) do dir /ad /on /s /b "%%G" >> folderlist.txt
答案 0 :(得分:0)
@ECHO OFF
SETLOCAL
FOR /f "delims=" %%a IN (q20840158.txt) DO (
FOR /f "tokens=1,3delims=\" %%b IN ("%%a") DO IF "%%c"=="" ECHO(%%a
)
GOTO :EOF
我使用了一个名为q20840158.txt
的文件,其中包含我的测试数据。
但是 - 它真的不清楚你的意思是什么?重复"。 你在此上下文中定义重复的准确程度如何?
答案 1 :(得分:0)
你几乎就在那里,如果你只想在删除子文件夹后得到结果列表,只需尝试将适当的行回显到列表文件,先将它复制到临时文件中。
move folderlist.txt %temp%\folders.txt
for /f "tokens=1,2,* delims=\" %%a in (%temp%\folders.txt) do (
if .%%c==. echo %%a\%%b >>folderlist.txt
)
如果要从磁盘中删除该文件夹,请将该行更改为
if not .%%c==. rd /s %%a\%%b\%%c
答案 2 :(得分:0)
@ECHO OFF
SETLOCAL
COPY NUL newfile.txt >NUL 2>nul
FOR /f "delims=" %%a IN (q20840158.txt) DO (
ECHO %%a|FINDSTR /I /L /g:"newfile.txt" >NUL 2>NUL
IF ERRORLEVEL 1 >>"newfile.txt" ECHO(%%a
)
TYPE newfile.txt
GOTO :EOF
我使用了一个名为q20840158.txt
的文件,其中包含我的测试数据。
制作newfile.txt
啊 - 你想确保列表中的任何新增内容都不包含以前的条目......