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';
提前致谢
答案 0 :(得分:3)
不完全:
@echo %1| sed "s/\([A-Z]\)/ \1/g"
但你确实必须确保sed
可用(CygWin或GnuWin32对这些工具非常好 - 如果你只需要特定的东西,我更喜欢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";