我在解析字符串时遇到问题,该字符串仅包含目录路径。例如,
我的输入字符串是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
答案 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。当我看到你的回复时,我正要发帖。