批处理路径和单词宏

时间:2014-05-28 20:21:40

标签: windows batch-file path ms-word

我是程序员,虽然我对脚本和批处理文件几乎没有经验。

使用此页面作为参考,它基本上描述了我想要做的事情:搜索文件并返回路径。 Find file and return full path using a batch file

一旦执行echo%p%(这样我就可以看到存储的值),屏幕上打印的所有内容都是" ECHO关闭。"从我读过的内容来看,这可能是由空格引起的,也可能是因为该值为空白。

据我所知,一切似乎都运转良好。

我正在尝试通过使其动态处理32位与64位程序和各种Microsoft Office版本的路径问题来改进当前批处理文件。

这种结构有效:

IF EXIST "\\server\folder\file.dbf" (
"C:\Program Files (x86)\Microsoft Office\Office12\winword.exe" "\\server\folder\file.docx" /mDoMailMergeViewAllCG
)

打开Microsoft单词,加载正确的文档然后执行宏。

以下不起作用:

@echo off

set PF=
set p=

rem Determine if system is 32bit or 64 bit.
IF EXIST %ProgramFiles(x86)%(
  SET "PF=%ProgramFiles(x86)%"
) ELSE (
SET "PF=%ProgramFiles%"
)

rem Determine which version of office is being used.
FOR /r "%PF%\Microsoft Office\" %%a in (*.EXE) do (
  IF "%%~nxa"=="WINWORD.EXE" (
     set "p=%%~dpnxa"
  )
)

IF EXIST "\\server\folder\file.dbf" (
   %p% "\\server\folder\file.docx" /mDoMailMergeViewAllCG
)

虽然宏没有被执行,但Microsoft Word会打开正确的文档。

在研究这个主题时,我看到了关于使用其他方法的评论,例如PowerShell或auto宏。在这个时候,我不准备探索这些选择。

如何获取执行宏的新脚本?

1 个答案:

答案 0 :(得分:0)

@echo off
    setlocal enableextensions disabledelayedexpansion

    if defined ProgramFiles(x86) (
        set "pf=%ProgramFiles(x86)%"
    ) else (
        set "pf=%ProgramFiles%"
    )
    set "pf=%pf%\Microsoft Office"

    set "p="
    for /f "delims=" %%a in ('dir /s /b "%pf%\WinWord.exe"') do set "p=%%~fa"

    if defined p if exist "\\server\folder\file.dbf" (
        "%p%"  "\\server\folder\file.docx" /mDoMailMergeViewAllCG
    )

    endlocal

如果您的第一个代码有效,我认为没有理由不这样做。您的代码中存在一些语法问题(在打开括号之前缺少空格,非引用程序调用)但逻辑似乎是正确的。