首页 > 解决方案 > 如何在 .bat 文件的“for”命令中格式化 Tesseract-OCR 语言设置

问题描述

我是 Windows cmd 和 .bat 以及 Tesseract 的新手。但多亏了这份清单,我已经取得了一些成功。

我的第一个成功是这个 cmd-window 行:

tesseract.exe -l eng+lat+ita D:\TIFs\Convivio.tiff D:\TIFs\Convivio

我的下一个成功是 .bat 文件:

:Start
   @Echo off
   ECHO.
   ECHO This is a batch file
   ECHO.
   PAUSE
   BREAK=ON
   Set _SourcePath=D:\temp\TIFs\*.tif
   Set _OutputPath=D:\temp\TIFs\
   Set _Tesseract="D:\temp\Tesseract-OCR\tesseract.exe"
:Convert
   For %%A in (%_SourcePath%) Do Echo Converting "%%A"...... &"D:\temp\Tesseract-OCR\tesseract.exe" "%%A" "%_OutputPath%%%~nA"
   PAUSE
:End   
   Set "_SourcePath="
   Set "_OutputPath="
   Set "_Tesseract="

现在的问题是如何在 .bat 文件中包含 cmd-window 行中的“-l eng+lat+ita”位。

我从对“For”命令的解释中了解到这是可能的,它指出“ do command ”后面可以跟“ CommandLineOptions ”(即“-l eng+lat+ita”)。

任何帮助将不胜感激......因为我已经为此努力了几个小时......


更新:找到了一个替代方案,但仍然想回答我的问题。

我不知道“FOR”命令可以从 cmd 运行。因此,我在 cmd 窗口中粘贴了以下行:

for %i in (*.tif) do "D:\temp\Tesseract-OCR\tesseract.exe" -l eng+lat+ita "%i" "D:\temp\%~ni"

而且,它奏效了!

不过,正如我所说,如何使用 .bat 文件执行此操作?

标签: windowsbatch-filefor-loopcommand-linetesseract

解决方案


@ECHO OFF
SETLOCAL
:Start
@Echo off
ECHO.
ECHO This is a batch file
ECHO.
PAUSE
BREAK=ON
Set "_SourcePath=D:\temp\TIFs\*.tif"
Set "_OutputPath=D:\temp\TIFs"
Set "_Tesseract=D:\temp\Tesseract-OCR\tesseract.exe"

:Convert
For %%A in ("%_SourcePath%") Do Echo Converting "%%A"...... &"%_Tesseract%" -l eng+lat+ita "%%A" "%_OutputPath%\%%~nA"
PAUSE
:End   
rem Set "_SourcePath="
rem Set "_OutputPath="
rem Set "_Tesseract="
GOTO :EOF

由于我没有该tesseract实用程序,因此我使用了另一个。正如我对其他实用程序所期望的那样,上述内容对我有用,因此不能保证tesseract.

通常的做法是启动一个批处理,setlocal这使得清理工作变得不必要(因此减少rem了),因为在批处理终止时执行一个隐式endlocal,将环境恢复到其初始状态。

分配包含引号的值是有效的,但在组合元素时很尴尬。同上用反斜杠终止一个值。我已将您的代码转换为我喜欢的语法。请注意,语法SET "var=value"(其中 value 可能为空)用于确保分配的值中不包含任何杂散的尾随空格。

它会在你的情况下工作吗?交给你试试。


推荐阅读