2010-09-28 71 views
1

嗨!
我想用這個簡單的script.sh:'翻譯'.sh到.bat

#!/bin/sh 
filename=$1 
echo $filename | sed 's/\([A-Z]\)/ \1/g'; 

在script.bat,但我的電腦是沒有窗戶,所以我不能測試它。這一個將是正確的?

prueba.bat 

filename=%1 
echo %filename% | sed 's/\([A-Z]\)/ \1/g'; 

在此先感謝

+0

你爲什麼不乾脆等到你有一個Windows機器然後測試它? – ghostdog74 2010-09-28 12:52:42

+0

@ ghostdog74該評論與任何 – DSF 2013-11-30 18:21:47

回答

3

不太:

@echo %1| sed "s/\([A-Z]\)/ \1/g" 

但是,你必須確保你有一個sed可用(CygWinGnuWin32非常適合這些工具 - 我喜歡的GnuWin32如果你只需要具體的事情不同,Cygwin往往給你一個lot)。

你還必須小心使用像filename這樣的環境變量。雖然UNIX將在當前shell的環境下創建它們(因此它的效果將受到限制),但cmd.exe腳本會「泄漏」它們(因此直接使用%1)。

+0

需要雙引號相關。 – ghostdog74 2010-09-28 12:55:10

+0

實際上,這對CygWin'sed'沒有什麼影響,但我不確定GnuWin32,所以我會改變它。 – paxdiablo 2010-09-28 12:59:27

2

輸入cmd.exe,%1%並不意味着什麼,用%1或者更好,%~1從而消除可能引號代替。

另外,對於sed的文字表達式使用雙引號。單引號將傳遞給sed。

set filename=%~1 
echo.%filename%| sed "s/\([A-Z\)/ \1/g" 

在bash,使用"在你$表達式。

1

您需要使用set來聲明一個變量,最好使用@echo off

@echo off 
set filename=%1 
echo %filename% | sed 's/\([A-Z]\)/ \1/g'; 
0

Windows CMD.EXE的恨單引號

echo %filename% | sed "s/\([A-Z]\)/ \1/g";