2012-01-25 81 views
0

我在文本文件中的重复记号,我想不重复的令牌(保持分隔符)批处理脚本 - 在文件中删除重复的令牌

分隔符是创建新的文本文件:〜@^*^@ 〜
示例文件:

[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@[email protected]^*^@~bbb 

的结果应该是:

[email protected]^*^@[email protected]^*^@~xxx 

found script是删除重复行:

================================== 
@echo off > outfile 
if %1'==' echo which file? && goto :eof 
if not exist %1 echo %1 not found && goto :eof 

for /f "tokens=* delims= " %%a in (%1) do (
find "%%a" <outfile> nul 
    if errorlevel 1 echo %%a >> outfile 
) 

脚本的工作很好的重复线路,
所以我修改从delims:

"tokens=* delims=" 

"tokens=* [email protected]^*^@~" 

但它不会工作,我究竟做错了什么?是分隔符保留字之一吗?
谢谢你的任何建议。

+1

对于您给出的示例,您预期的输出是什么? –

+0

结果应该是:aaa〜@^*^@〜〜bbb〜@^*^@〜xxx – user648026

+1

您的分隔符是多个字符的特定序列。任何分隔符都可以出现在一个值中吗?例如,could @出现在不被视为分隔符的一部分的值中? – dbenham

回答

2

FOR DELIMITERS选项将每个字符作为分隔符。你不能使用一系列字符作为分隔符,所以它不会对你的情况有所帮助。

Windows批处理是简单任务的边际文本处理器。对于Windows批处理文件,您有一个特别讨厌的问题。它可能是可行的,但代码将是复杂和缓慢充其量

我强烈建议你使用一些更适合文本处理的工具。我相信以下任一可用于:

  • VBscript的
  • 的JavaScript
  • Powershell的
  • 第三方工具,如Gnu sed for Windows,PERL,...更多

Windows批处理时可能是你可以做出的最糟糕的选择,尤其是对于你的问题。 (这是来自真正喜欢使用批次的人)

+0

Thenks dbenham,VBS更容易我可以使用split或字符串和InStr函数执行此操作,但由于客户端的限制,它需要批处理... – user648026

+1

您可以使用CSCRIPT从批处理中运行VBS脚本。您的客户是否禁用了该功能? – dbenham

+1

@ user648026 - 你的文件有一行,对吗?文件的最大大小是多少?批处理不能处理长度> 8191字节的文本行。 – dbenham