2010-09-28 5 views
1

HI!
Я хотел бы использовать этот простой script.sh:'Перевести. .sh на .bat

#!/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

почему вы не просто ждать, пока у вас есть Windows, машины, а затем проверить его? – ghostdog74

+0

@ ghostdog74 Как этот комментарий относится ко всему, – DSF

ответ

3

Не совсем:

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

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

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

+0

должны быть двойными кавычками. – ghostdog74

+0

Собственно, это не имеет никакого значения для CygWin 'sed', но я не уверен в GnuWin32, поэтому я его изменю. – paxdiablo

2

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

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

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

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

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"; 
Смежные вопросы