对每个子目录中的第一个文件执行操作

时间:2017-07-20 15:58:30

标签: batch-file cmd

我尝试使用

对一组子目录中按字母顺序排列的第一个文件执行命令
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 }
 }

我尝试将记事本更改为单词并调用宏,但到目前为止没有运气

2 个答案:

答案 0 :(得分:0)

以下是在PowerShell中执行此操作的方法。我使用了notepad.exe,但你可以使用你想要的任何东西。

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

如果您 - 必须从cmd shell .bat脚本执行此操作,您可以:

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

HT到mklement0进行转义。

答案 1 :(得分: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\!_!")