«Перевести» .sh в .bat - PullRequest
       35

«Перевести» .sh в .bat

1 голос
/ 28 сентября 2010

Привет!
Я хотел бы использовать этот простой скрипт.Это было бы правильно ??

prueba.bat 

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

Заранее спасибо

Ответы [ 4 ]

3 голосов
/ 28 сентября 2010

Не совсем:

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

Но вы должны убедиться, что у вас есть sed в наличии ( CygWin или GnuWin32 отлично подходят для этих инструментов- Я предпочитаю GnuWin32, если вам нужны только конкретные вещи, CygWin стремится дать вам лот ).

Вы также должны быть осторожны с переменными окружения, такими как filename.В то время как UNIX будет создавать их в контексте текущей оболочки (поэтому ее эффект будет ограничен), сценарии cmd.exe будут «утекать» их (отсюда и прямое использование %1).

2 голосов
/ 28 сентября 2010

В cmd.exe %1% ничего не значит, используйте %1 или, лучше, %~1, который вместо этого удаляет возможные кавычки.

Также используйте двойные кавычки для литеральных выражений для sed. Одиночные кавычки будут переданы в sed.

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

В bash используйте " вокруг ваших $ выражений.

1 голос
/ 28 сентября 2010

Вам нужно использовать set для объявления переменной, и желательно использовать @echo off

@echo off
set filename=%1
echo %filename% | sed 's/\([A-Z]\)/ \1/g';
0 голосов
/ 28 сентября 2010

Windows cmd.exe ненавидит одинарные кавычки

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