繁体   English   中英

在Windows中使用cygwin将长文件参数从批处理脚本传递到bash脚本

[英]pass long file argument from batch script to bash script in windows with cygwin

我正在关注这篇文章:

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"添加引号以完成文件名。

批处理脚本必须将文件“ 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"'

没有一个看起来可行,有什么建议吗?

批处理文件在处理双引号时可能会比较棘手,而添加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“带有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也是如此。 我希望这回答了你的问题!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM