文件路径作为参数 - I / O错误:无法打开文件

时间:2016-11-25 09:12:10

标签: bash batch-file

我正在尝试使用Git Bash以文件路径作为参数打开批处理文件。我可以使用%1获取参数。但是,当我给它路径时,我收到了这个错误:

  

I / O错误:无法打开文件'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,这会在我的sh.exe文件上调用file.sh,这样就完成了整个操作。解决方法,但至少现在它使用cmd。

1 个答案:

答案 0 :(得分: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和批处理文件中的参数似乎工作:

batch-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