views:

34

answers:

3

Hi,

I have a problem with parsing a string, which consists only of directory path. For ex.

My input string is


Abc\Program Files\sample\


My output should be


Abc//Program Files//sample


The script should work for input path of any length i.e., it can contain any no. of subdirectories. (For ex., abc\temp\sample\folder\joe)

I have looked for help in many links but to no avail. Looks like FOR command extracts only one whole line or a string (when we use ‘token’ keyword in FOR syntax) but my problem is that I am not aware of the input path length and hence, the no. of tokens.

My idea was to use \ as a delimiter and then extract each word before and after it (), and put the words to an output file along with // till we reach the end of the string.

I tried implementing the following but it did not work:


@echo off

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


The file orig.txt contains only one line i.e, Abc\Program Files\sample\

The output that I get contains only: Abc//
The above output contains blank spaces as well after ‘Abc//’

My desired output should be: Abc//program Files//sample//

Can anyone please help me with this?

Regards,

Technext

+2  A: 

Have you tried pattern matching? I know in perl and Java you can do a simple replace that finds all of the "\" and replaces them with "//"

Example in perl:

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

Just look up pattern matching or regex

Kyra
A: 

Using a loop and a temporary file, the following works for your scenario :

@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

Given this input

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

you'll get the following output :

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

Pretty ugly isn't it ? ^^

hoang
A: 

Thanks for your input Kyra! I know it's easy in Shell or Perl but anyways, i have now got the solution.

Here it is:


type nul>output.txt

FOR /F "usebackq tokens=*" %%x in ("orig.txt") do (

set LINE=%%x

call set LINE=%%LINE:\=//%%

call echo:%%LINE%%

) >>output.txt


Thanks hoang. I was about to post when i saw your reply.

Thanks again,

Technext

Technext
Your solution is far prettier :) but keep the trailing slashes
hoang