1

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

我的输入字符串是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//'之后也包含空格</p>

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

谁能帮我解决这个问题?

问候,
Technext

4

4 回答 4

2

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

perl 中的示例:

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

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

于 2010-06-15T17:06:46.083 回答
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//
于 2011-11-02T14:47:15.620 回答
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

很丑是不是?^^

于 2010-06-16T08:48:03.893 回答
0

感谢您的输入凯拉!我知道这在 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

谢谢黄。刚要发帖,看到你的回复。

于 2010-06-16T09:35:10.677 回答