2010-06-15 127 views
1

分離我有解析字符串,它由唯一的目錄路徑的問題。對於恩,無法解析的字符串(包含路徑)由分隔符

我輸入的字符串Abc\Program Files\sample\

我的輸出應爲Abc//Program Files//sample

腳本應即任意長度的輸入路徑的工作,它可以包含任何沒有。的子目錄。 (對於離,ABC \ TEMP \樣本\文件夾\喬)

我已經在很多環節,但無濟於事尋找幫助。看起來像FOR命令只提取了一整行或一個字符串(當我們在FOR語法中使用'token'關鍵字時),但是我的問題是我沒有意識到輸入路徑長度,因此沒有。的令牌。

我的想法是使用\作爲分隔符,然後之前和之後()提取每個字,並把話說到輸出文件以//一起,直到我們到達字符串的結尾。

我試圖實現以下,但它沒有工作:

@echo off 

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

文件orig.txt只有一行即美國廣播公司\ Program Files文件\樣本\

,我得到的輸出包含只有:Abc //

上述輸出包含空格以及後 'ABC //'

我所需的輸出應爲:Abc //程序文件// //樣品

任何人都可以請幫我這個?

問候,
Technext

回答

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 

由於晃。當我看到您的回覆時,我即將張貼。

+0

您的解決方案是遠遠漂亮:)但保留尾隨斜槓 – hoang 2010-06-16 09:46:07

2

你試過模式匹配?我知道在Perl和Java,你可以做一個簡單的替換查找所有的「\」,並以「//」

例在Perl替換它們:

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

只是仰望模式匹配或正則表達式

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 

很醜陋,不是嗎? ^^

1

你可以使用簡單的字符串substition:

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// 
+0

這不是同一個解決方案從technext的人嗎? – jeb 2011-11-02 17:03:22