batch-file - 在批处理文件中的“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
)
解决方案
在您的代码中,&&
确实不是衍生子进程的一部分。要强制解析器包含它们,请转义它们:
start /b "" "%WCONV%" -oice -nme "%%X" "%%Xx" ^&^& del "%%X"
(注意:就我个人而言,我会使用,/min
而不是/b
ymmv)
根据评论,以下内容应该适合您:
start /b "" cmd /c ""%WCONV%" -oice -nme "%%X" "%%Xx" && del "%%X""
推荐阅读
- javascript - 当我们想向 DOM 添加方法时,为什么要将元素存储在变量中?
- assembly - NASM 在 ret 之前推送
- python - Python - 列表列表的排列(并非全部相同)
- angular - 如何使用 Ivy 修复 Angular 9 生产构建中的错误:“目标入口点“模块”中的错误缺少依赖项”
- javascript - TestCafe 下拉选择器
- aws-step-functions - AWS Step 函数将状态与活动映射
- c++ - C++ 运算符重载错误:在只读对象中分配成员“”
- bash - Grep / Sed 结果和搜索词进入新文件
- java - 反序列化 avro 对象时出现 Spring MessageConversionException
- javascript - 使用for循环动态添加div元素