1

利用这些论坛的知识,我编写了一个有用的批处理脚本。

Del "- Output.tx_"
Del "- Output.txt"

FOR %%I in (*.txt) do @echo Filename: %%~nxI >>"- Output.tx_" & echo. >>"- Output.tx_" & echo. >>"- Output.tx_" & FOR %%f in (%%I) do type %%I >>"- Output.tx_" & echo. >>"- Output.tx_" & echo. >>"- Output.tx_"

TYPE "- Output.tx_" | MORE /E /P /S > "- Output.txt"
Del "- Output.tx_"

我家的电脑是XP(SP3,32位),脚本完美结合文本文件如下图。

Filename: Test1.txt  

[Text file 1 contents]

Filename: Test2.txt  

[Text file 2 contents] 

... and so on. 

但是,几个月前,我在工作时在我的计算机上运行了这个脚本作为测试,但遇到了问题。工作的计算机装有 Windows 7(32 位,SP1),并且仅将文本文件的标题合并到输出文件中。这导致了以下结果:

Filename: Test1.txt  

Filename: Test2.txt     

... and so on. 

对于让脚本在 Windows 7 上正常工作的任何意见或反馈,我们将不胜感激。

谢谢,

DWIC

4

1 回答 1

1

我唯一能想到的是,Win7 计算机上的某些(或全部)文本文件的名称中有空格或特殊字符,因此 TYPE 无法找到它们。如果发生这种情况,应该有一条错误消息,但它不在您的输出文件中,因为您没有重定向 stderr。

这个问题可以通过引用变量来解决。

您的代码比它需要的更复杂。这是一个简化的版本,它做同样的事情,除了引用问题已得到修复。我还重定向了标准错误。

@echo off
2>nul del "- Output.txt"
(
  for %%F in (*.txt) do @(
    echo Filename: %%F
    echo.
    echo.
    type "%%F"
    echo.
    echo.
  )
) | more /s /p >"- Output.tx_" 2>&1
move "- Output.tx_" "- Output.txt" >nul
于 2012-09-19T02:51:25.133 回答