如何在.bat文件的“ for”命令中格式化Tesseract-OCR语言设置

时间:2019-08-23 02:31:47

标签: windows batch-file for-loop command-line tesseract

我是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”位。

我想到an explanation of the "For" command可以做到这一点,它指出“ 执行 命令”后面可以紧跟“ CommandLineOptions ”(即“ -l eng + lat + ita”)。

任何帮助将不胜感激...因为我已经在这个头上敲了好几个小时了...


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

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

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

而且有效!

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

1 个答案:

答案 0 :(得分:0)

@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"(值可能为空)用于确保分配的值中不包含任何杂散的尾随空格。

在您的情况下它将起作用吗?交给您尝试。