簡體   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