无法解析由分隔符分隔的字符串(包含路径)

时间:2010-06-15 16:48:01

标签: windows-scripting batch-file

我在解析字符串时遇到问题,该字符串仅包含目录路径。例如,

我的输入字符串是Abc\Program Files\sample\

我的输出应为Abc//Program Files//sample

脚本应该适用于任何长度的输入路径,即它可以包含任何编号。子目录。 (例如,abc \ temp \ sample \ folder \ joe)

我在许多链接中寻求帮助,但无济于事。看起来FOR命令只提取一个整行或一个字符串(当我们在FOR语法中使用'token'关键字时)但我的问题是我不知道输入路径长度,因此,没有。令牌。

我的想法是使用\作为分隔符然后在它之前和之后提取每个单词(),并将单词与//一起放到输出文件中,直到我们到达字符串的末尾。

我尝试执行以下操作,但它不起作用:

@echo off

FOR /F "delims=\" %%x in (orig.txt) do (
    IF NOT %%x == "" echo.%%x//>output.txt    
)

文件orig.txt只包含一行,即Abc \ Program Files \ sample \

我得到的输出仅包含:Abc //

在'Abc //'

之后,上面的输出也包含空格

我想要的输出应该是:Abc // program Files // sample //

任何人都可以帮我这个吗?

的问候,
Technext

4 个答案:

答案 0 :(得分:2)

您是否尝试过模式匹配?我知道在perl和Java中你可以做一个简单的替换,找到所有的“\”并用“//”替换它们

perl中的示例:

my $var = "Abc\Program Files\sample\"
$var  =~ tr/\\/\/\//; 

只需查找模式匹配或正则表达式

答案 1 :(得分:1)

您可以使用简单的字符串替换:

C:\>set myvariable=Abc\Program Files\sample\    

C:\>echo %myvariable%
Abc\Program Files\sample\

C:\>set myvariable=%myvariable:\=//%

C:\>echo %myvariable%    
Abc//Program Files//sample//

答案 2 :(得分:0)

使用循环和临时文件,以下适用于您的方案:

@echo off > output.txt
FOR /F "tokens=1,* delims=\" %%x in (orig.txt) do ( 
IF NOT %%y=="" echo %%x//%%y>>output.txt
)
:loop
@echo off > temp.txt
set /a stop=1
FOR /F "tokens=1,* delims=\" %%x in (output.txt) do (
IF NOT "%%y"=="" (
echo %%x//%%y>>temp.txt
set /a stop=0
) ELSE (echo %%x>>temp.txt)
)
IF NOT %stop%==1 (
move /Y temp.txt output.txt
) ELSE (goto end)
goto loop
:end
move /Y temp.txt output.txt

鉴于此输入

Abc\Program Files\sample\
Another\Example\\\

您将获得以下输出:

Abc//Program Files//sample
Another//Example

非常丑陋不是吗? ^^

答案 3 :(得分:0)

感谢您输入Kyra!我知道Shell或Perl很容易,但无论如何,我现在已经得到了解决方案。

这是:


输入nul> output.txt

FOR /F "usebackq tokens=*" %%x in ("orig.txt") do (
    set LINE=%%x
    call set LINE=%%LINE:\=//%%
    call echo:%%LINE%%
) >>output.txt

谢谢hoang。当我看到你的回复时,我正要发帖。