我是程序员,虽然我对脚本和批处理文件几乎没有经验。
使用此页面作为参考,它基本上描述了我想要做的事情:搜索文件并返回路径。 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宏。在这个时候,我不准备探索这些选择。
如何获取执行宏的新脚本?
答案 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
如果您的第一个代码有效,我认为没有理由不这样做。您的代码中存在一些语法问题(在打开括号之前缺少空格,非引用程序调用)但逻辑似乎是正确的。