首页 > 解决方案 > 在批处理文件中的“start /b”之后使用 && 链接命令

问题描述

我正在尝试生成多个进程以递归地将.doc文件夹中的文件转换为.docx使用 Microsoft 的wordconv.exe. 我知道这将产生无限数量的它们,所以这不是这里的问题。

这是我所拥有的:

@echo off

set "WCONV=C:\Program Files\Microsoft Office\root\Office16\Wordconv.exe"

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
    FOR %%X in (*.doc) DO (

        echo "%%F\%%X"

        start /b "" %WCONV% -oice -nme "%%X" "%%Xx" && del "%%X"

    )
    popd
)

问题是它del "%%X"似乎在成功完成时执行start /b而不是在完成时执行%WCONV% -oice -nme "%%X" "%%Xx",因此原始.doc文件在开始处理之前被删除wordconv

我如何分组%WCONV% -oice -nme "%%X" "%%Xx" && del "%%X"以便它作为一个命令start /b来产生?

编辑澄清: 如果我连续运行脚本,没有start /b,一切正常,因为只有在转换成功时,文档才会被转换和删除。这就是我的意思:

@echo off

set "WCONV=C:\Program Files\Microsoft Office\root\Office16\Wordconv.exe"

FOR /D /r %%F in ("*") DO (
    pushd %CD%
    cd %%F
    FOR %%X in (*.doc) DO (

        echo "%%F\%%X"

        %WCONV% -oice -nme "%%X" "%%Xx" && del "%%X"

    )
    popd
)

标签: batch-file

解决方案


在您的代码中,&&确实不是衍生子进程的一部分。要强制解析器包含它们,请转义它们:

start /b "" "%WCONV%" -oice -nme "%%X" "%%Xx" ^&^& del "%%X"

(注意:就我个人而言,我会使用,/min而不是/bymmv)

根据评论,以下内容应该适合您:

start /b "" cmd /c ""%WCONV%" -oice -nme "%%X" "%%Xx" && del "%%X""

推荐阅读