我关注这篇文章:
http://blog.dotsmart.net/2011/01/27/executing-cygwin-bash-scripts-on-windows/
我需要使用参数执行批处理文件,并将此参数传递给bash脚本。参数是带有空格的长文件名,类似于FILE WITH SPACES.xlsx。
在Windows中:
c> program.cmd "FILE WITH SPACES.xlsx"
#Windows添加引号以填写文件名。
批处理脚本必须将文件名“FILE WITH SPACES.xlsx”传递给.sh脚本,如下所示:
# program.sh "FILE WITH SPACES.xlsx"
问题是,文件没有引号传递:
# program.sh FILE WITH SPACES.xlsx
脚本program.sh有:
#!/bin/sh
anyprogram "$1"
引号未通过,程序anyprogram
找不到文件FILE WITH SPACES.xlsx。
我试图逃避“与\而不是工作:
#!/bin/sh
anyprogram "\"$1"\"
此外,还有:
#!/bin/sh
anyprogram '"$1"'
没有看起来有效,有什么建议吗?
答案 0 :(得分:0)
批处理文件处理双引号的方式可能很棘手,而添加Bash变量会使事情变得更加棘手。以下是我认为可以解决您具体问题的解决方案:
批处理文件位置:C:\ Users \ Jamey \ Desktop \ blah.bat
批处理文件内容:
@ECHO OFF
ECHO I AM A BATCH FILE.
CD C:\Users\Jamey\Desktop
ECHO TESTING > %1
TYPE %1
ECHO.
SET scriptpath=/cygdrive/c/users/jamey/desktop
C:\cygwin64\bin\bash.exe -c "$scriptpath/program.sh "%1""
Bash脚本位置:C:\ Users \ Jamey \ Desktop \ program.sh
Bash脚本内容:
#!/bin/bash
echo "I AM A BASH SCRIPT."
echo "A WINDOWS BATCH FILE TOLD ME TO SAY THIS: $1"
echo
ls -l "$1"
echo
cat "$1"
echo
rm -v "$1"
以下是运行blah.bat“FILE NAME WITH SPACES.txt”的cmd.exe输出:
C:\Users\Jamey\Desktop>blah.bat "FILE NAME WITH SPACES.txt"
I AM A BATCH FILE.
TESTING
I AM A BASH SCRIPT.
A WINDOWS BATCH FILE TOLD ME TO SAY THIS: FILE NAME WITH SPACES.txt
-rwxrwx---+ 1 Jamey None 10 Sep 24 09:05 FILE NAME WITH SPACES.txt
TESTING
removed 'FILE NAME WITH SPACES.txt'
或者,如果您将'rm -v'替换为'cygstart',则会在记事本中打开“FILE NAME WITH SPACES.txt”。对于带有.xlsx扩展名的Excel也是如此。我希望这能回答你的问题!