2016-09-27 346 views
0

我对编写批处理文件非常陌生,但我正尝试自动完成一些数据更新操作。我在每个月都有一个pdf文件的文件夹中有pdftotext.exe。我希望在批处理文件中使用通配符,这样我就不必每个月都更改一次代码。所以现在我运行:在批处理文件中使用变量作为文件路径

pdftotext -raw -nopgbrk CO_Aug16.pdf 

这将运行与PDF格式,并在同一个文件夹中的可执行文件的转换,但如果我尝试在文件名中使用通配符:

pdftotext -raw -nopgbrk CO*.pdf 

它看起来对于这样的命名方式文件,所以我试图创建一个名为FNAME变量,把通配符这个名字,但是当我运行:

set fname = "C:\Users\...\CO*.pdf" 
pdftotext -raw -nopgbrk "%fname%" 

它就像它试图打开一个空白文件,我得到:

I/O Error: Couldn't open file '' 

我可以使用通配符吗?对不起,如果这是一个基本问题,我刚开始学习写在这个项目的批处理文件。

+0

首先删除'set'语句中'='两边的空格,以便读取'set fname =“C:\ Users \ ... \ CO * .pdf“'(当然使用文件的实际有效路径)。这会改变什么吗? –

+0

至少让它看看文件,但是说它找不到该文件,假设它不会使用通配符。 –

回答

0

通配符的处理由应用程序完成,而不是由终端完成。

我使用的方法是使用dir *.pdf找到文件,然后为每个文件调用该命令。

for /F "tokens=*" %%f in ('dir /b *.pdf') do pdftotext -raw -nopgbrk "%%~f" 

如果您在批处理文件中输入此值,请使用2个百分比符号。如果你直接写入到cmd就用1

说明:

  • FOR/F - 另一个命令输出的每一行运行命令
  • 令牌= * - 把所有的线内容转换为%f
  • dir/b * .pdf =我们循环的命令。查找所有pdf。只输出最小的数据。
  • 您的命令 - %%〜f是文件名。 〜剥去任何引号
+0

当你把dir/b * .pdf,应该是我的目录,所以C:\ Users \ ..,文件在哪里?因为当我尝试的时候出现错误 –

+0

不,“dir”是一个列出目录内容的命令。在这种情况下,它参考脚本的当前工作目录。要查找另一个目录,请执行'dir/b c:\ users \ myuser \ hisFolder \ *。pdf' – FloatingKiwi

+0

真棒!谢谢你的解释,并且说明每个部分的作用,这有助于我更多地理解它。 –

相关问题