2016-11-25 61 views
0

我想打開一個批處理文件,使用Git Bash和一個文件路徑作爲參數。我可以使用%1來獲取參數。然而,當我給它的路徑,我得到這個錯誤:作爲參數的文件路徑 - I/O錯誤:無法打開文件

I/O Error: Couldn't open file 'C:UsersUsernameDownloadsFile.pdf'

我跑我的批處理這樣的:

count.bat C:\Users\Username\Downloads\File.pdf 

我試圖在文件路徑,可與/更換\ ,但是我將拖放一個文件到命令提示符中,我不想替換所有的反斜槓。下面是我做了什麼:

setlocal ENABLEDELAYEDEXPANSION 
set variable="%1" 
call set variable=%%variable:\=/%% 

pdftotext %variable% -enc UTF-8 - | wc -m 

應該替換\/但事實並非如此。我得到相同的輸出,而不僅僅是做pdftotext %1 -enc....

編輯:變成Git Bash把\當作轉義字符。這意味着我不能簡單地在沒有引號的地方輸入路徑,因爲它會試圖逃避它。我最終使用geisterfurz007關於打開cmd.exe的建議,然後執行file.bat,這將在我的file.sh文件上調用sh.exe,然後執行整個操作。一種解決方法,但至少現在它使用cmd。

+0

無需延遲擴展,並且不需要'call'和雙''%...在這裏有時(取決於程序)用雙反斜槓替換單個反斜槓也可能有所幫助... – aschipfl

回答

1

我不知道到底是什麼問題你,但下面做這項工作對我來說:

@echo off 
setlocal EnableDelayedExpansion 
set variable="%~1" 
set variable=%variable:\=/% 
echo %variable% 

注意在%~1這個~將自動刪除,如果有任何引號。我不確定這個電話或雙重%是否導致了這個問題,但如果我沒有弄錯的話,在這種情況下他們不需要。

用法:foo.bat "C:\my Path\to\yeeeeey.file"

輸出:"C:/my Path/to/yeeeeey.file"

用法:foo.bat C:\Users\Username\Downloads\File.pdf

輸出:"C:/Users/Username/Downloads/File.pdf"

編輯:經過與MortenMoulder更長的聊天會話,我們找到了一個解決方法是:它似乎使用包含他的一個命令pdftotext $1 -enc UTF-8 - | wc -m和批處理文件中的參數的bash文件啓動Git-Bash似乎工作:

批file.bat:

@echo off 
setlocal EnableDelayedExpansion 
set variable="%~1" 
set variable=%variable:\=/% 
C:\Program Files\Git\bin\sh.exe C:\Users\Username\count.sh %variable% 

count.sh:

pdftotext $1 -enc UTF-8 - | wc -m 
+0

這是因爲你用雙引號包圍了你的路徑。情況並非總是如此。看看我的例子。該路徑沒有空格,這意味着雙引號不是必需的。 – MortenMoulder

+0

不!看我的編輯。如果您在啓動文件時使用引號將它括起來並不重要。請看我的代碼下的第一行。如果沒有引號,則不會刪除(顯然),但如果有任何引號將被刪除。 – geisterfurz007

+0

我沒有得到和你一樣的結果。嗯。當我做'echo%variable%'時,它會給我'C:UsersUsernameDownloadsFile.pdf'。 – MortenMoulder

相關問題