'翻译'.sh到.bat

时间:2010-09-28 12:47:29

标签: scripting batch-file

HI!
我想使用这个简单的script.sh:

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

在script.bat中,但我的电脑不是Windows,所以我无法测试它。这个是正确的吗?

prueba.bat 

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

提前致谢

4 个答案:

答案 0 :(得分:3)

不完全:

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

但你确实必须确保sed可用(CygWinGnuWin32对这些工具非常好 - 如果你只需要特定的东西,我更喜欢GnuWin32,CygWin倾向于给你一个很多)。

您还需要注意filename等环境变量。虽然UNIX将在当前shell的上下文中创建它们(因此其效果将受到限制),但cmd.exe脚本将“泄漏”它们(因此直接使用%1)。

答案 1 :(得分:2)

在cmd.exe中,%1%并不代表任何内容,请使用%1或更好的%~1来删除可能的引号。

另外,对sed的文字表达式使用双引号。单引号将传递给sed。

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

在bash中,在"表达式周围使用$

答案 2 :(得分:1)

您需要使用set来声明变量,最好使用@echo off

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

答案 3 :(得分:0)

Windows cmd.exe讨厌单引号

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