【问题标题】:pass long file argument from batch script to bash script in windows with cygwin使用cygwin将长文件参数从批处理脚本传递给Windows中的bash脚本
【发布时间】:2015-09-16 02:46:25
【问题描述】:

我正在关注这篇文章:

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"'

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

【问题讨论】:

  • 嗨。感谢您的回答。参数不在批处理文件中,这些参数是动态的。
  • 在你的 .sh 脚本中你可以尝试in=\"$*\" 然后echo $in
  • 您能否在问题中包含批处理文件中正在调用.sh 文件的行?
  • $i 替换为$* 或(当调用正确时)$1
  • @MCND 我使用了相同的博文代码:blog.dotsmart.net/2011/01/27/…

标签: windows bash shell batch-file cygwin


【解决方案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 "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”,“带空格的文件名.txt”将在记事本中打开。带有 .xlsx 扩展名的 Excel 也是如此。我希望这能回答你的问题!

【讨论】:

  • 我不知道为什么这个问题或我的评论被否决了。从我的角度来看,我非常准确地回答了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-23
  • 2015-08-18
  • 2011-09-15
  • 2017-02-11
  • 1970-01-01
  • 2015-05-13
相关资源
最近更新 更多