0
@echo off
for %%j in (*.pdf) do (
    java -jar pdfbox-app-1.7.1.jar PDFToImage %%j
)

if exist *.jpg (
    for %%i in (*.jpg) do (
        mkdir %%~ni
        tesseract %%i %%~ni.txt
        move %%i %%~ni
        move %%~ni.txt %%~ni
    )
)

所以我有这个命令,它基本上可以转换:

  1. 将 pdf 文件转换为 jpg 文件。
  2. 对于所有 JPG 文件,它会创建相应的文件夹。
  3. 它使用 tesseract 软件将图像文件转换为文本文件。
  4. 将 JPG 文件移动到我刚刚创建的相应文件夹中(works)。
  5. 将文本文件移动到我刚刚创建的相应文件夹中(不起作用)。

谁能告诉我如何制作它,以便它将文本文件移动到相应的文件夹中,就像我对图像文件所做的那样?所以最后对于每个文件夹,它将包含图像文件和文本文件。谢谢 !

4

2 回答 2

3

为什么不首先告诉 tesseract 将文件放在正确的位置,这样您就不必再移动它了 :-)

此外,您确实应该在文件名周围加上引号,以防万一您遇到名称中包含空格的文件。

@echo off
for %%j in (*.pdf) do (
    java -jar pdfbox-app-1.7.1.jar PDFToImage "%%j"
)

if exist *.jpg (
    for %%i in (*.jpg) do (
        mkdir "%%~ni"
        tesseract "%%i" "%%~ni\%%~ni.txt"
        move "%%i" "%%~ni"
    )
)

如果出于某种奇怪的原因, tessereact 坚持将文件放在当前文件夹中,则更改当前文件夹。

@echo off
for %%j in (*.pdf) do (
    java -jar pdfbox-app-1.7.1.jar PDFToImage "%%j"
)

if exist *.jpg (
    for %%i in (*.jpg) do (
        mkdir "%%~ni"
        pushd "%%~ni"
        tesseract "..\%%i" "%%~ni.txt"
        popd
        move "%%i" "%%~ni"
    )
)
于 2013-03-08T13:11:16.390 回答
0

我强烈怀疑 tesseraxt 非常聪明,将实际转换作为一个单独的过程启动,然后终止。因此,当批处理尝试移动 .txt 文件时,结果可能不会被写入。

就个人而言,我会尝试(航空代码)

...
    tesseract %%i %%~ni.txt
    call :transfer %%~ni
...
...
goto :eof
:transfer
setlocal
set count=6
:tloop
if exist %1.txt move %1.jpg %1&move %1.txt %1&goto :eof
set /a count-=1
:: wait 1 second...
if %count% gtr 0 ping -n 2 127.0.0.1 >nul &goto tloop
echo could not find %1.txt after 6 seconds...
goto :eof
于 2013-03-08T05:56:09.287 回答