2017-07-20 45 views
2

执行对第一个文件的行动我想在一组子目录上按字母顺序排列第一文件执行一个命令在批处理文件中使用每个子目录

for /R "parentfolder" %%a in (*.doc) do "%winword%" /mRTF "%%a" 

。实际的命令和宏工作正常,但它对目录中的每个文件执行操作,而不仅仅是我想要的操作。

有没有办法在这种情况下设置-on标志?

任何帮助将不胜感激。


谢谢,让我更进一步。

目前我正在努力打开单词并通过PowerShell运行宏。我的代码看起来像现在这样:

$word = new-object -comobject word.application 
$path = 'C:\Users\---\Desktop\Download\' 
$folders = Get-ChildItem -Path $path -recurse | SELECT Attributes, Name | where-Object{ $_.Attributes -eq 'Directory'} | ForEach-Object{$_.name} 
foreach ($folder in $folders){ 
    Get-ChildItem -Path $path$folder | 
    Select-Object -First 1 | 
    ForEach-Object { notepad $_.FullName } 
} 

我试图改变记事本字和调用宏,但到目前为止没有运气

+0

这个词可执行文件不叫** **赢得word.exe? – Compo

+0

不幸的是,这并不容易:-( –

+0

这不是一个解决方案,只是一个观察,即键入'word'来调用名为'winword'的可执行文件永远不会工作,除非您预先创建了一个'链接' – Compo

回答

0

这里是一个办法做到这一点在PowerShell中。我使用notepad.exe,但你可以使用任何你想要的。

Get-ChildItem -Path '../' -Filter '*.doc' | 
    Select-Object -First 1 | 
    ForEach-Object { notepad "$_.FullName" } 

如果-must-做到这一点从CMD外壳蝙蝠脚本,你可以:

powershell -NoProfile -Command Get-ChildItem -Path '../' -Filter '*.doc' ^|^
    Select-Object -First 1 ^|^
    ForEach-Object { notepad \"$($_.FullName)\" } 

HT到mklement0转义。

0

基于您的示例代码和随后的评论,下面的例子可以在每个你需要的文件运行Word宏:

SetLocal EnableDelayedExpansion 
For /D %%A In ("parentfolder\*") Do (Set "_=" 
    For /F "Delims=" %%B In ('Dir/B/A-D-S-L/O-N "%%A\*.doc" 2^>Nul' 
    ) Do Set "_=%%B" 
    If Defined _ "%winword%" /mRTF "%%A\!_!") 
相关问题