如何使用批处理文件将文件移动到相应的文件夹

时间:2013-03-08 00:44:54

标签: batch-file

@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文件移动到我刚刚创建的相应文件夹中(工作)。
  5. 将文本文件移动到我刚刚创建的相应文件夹中(不起作用)。
  6. 任何人都可以告诉我如何制作它以便将文本文件移动到相应的文件夹中,就像我对图像文件一样吗?所以最后每个文件夹都包含图像文件和文本文件。谢谢!

2 个答案:

答案 0 :(得分:2)

为什么不告诉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"
    )
)

答案 1 :(得分: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