我正在尝试使用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。
答案 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"
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