Windows 批处理脚本在XP中工作,而不是在Win7中

Windows 批处理脚本在XP中工作,而不是在Win7中,windows,batch-file,Windows,Batch File,利用这些论坛的知识,我编译了一个有用的批处理脚本 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 >>"- Ou

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

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. 
然而,几个月前,我在工作的电脑上运行这个脚本作为测试,结果遇到了问题。工作中的计算机使用Windows7(32位,SP1),只将文本文件的标题合并到输出文件中。结果如下:

Filename: Test1.txt  

Filename: Test2.txt     

... and so on. 
如果您对如何使脚本在Windows7上正常工作有任何意见或反馈,我们将不胜感激

谢谢


DWIC

我唯一能想到的是,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
这个问题可以通过引用变量来解决

您的代码比需要的复杂。这里有一个简化版本,除了报价问题已经解决外,它也做了同样的事情。我还重定向了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

我唯一能想到的是,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
这个问题可以通过引用变量来解决

您的代码比需要的复杂。这里有一个简化版本,除了报价问题已经解决外,它也做了同样的事情。我还重定向了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

编辑-添加了关于错误的讨论,并在代码中重定向了stderr。先生,您是对的!非常感谢。工作文件的标题中有空格,而我家的测试文件没有空格。因此,我能够在我的家用电脑上复制错误,这当然意味着它毕竟不是Windows7的问题。虽然,我对你的剧本有一些问题,似乎无法靠我自己解决。除非最后删除“&>1”,否则脚本将无法工作。这样做之后,我的输出结果如下:
C:\Documents And Settings\Admin\Desktop\Macro(misc)projects\BAT\Test Folder>(echo Filename:-output.txt&echo&echo.&type“-output.txt”&echo&echo。)Filename:-output.txt C:\Documents And Settings\Admin\Desktop\Macro(misc)projects\BAT\Test Folder>(echo文件名:Test 1.txt&echo&echo&键入“Test 1.txt”&echo&echo。)文件名:Test 1.txt[文本文件1内容]。。。等等。
如果你不介意再帮我一次的话。。。我很好奇是否有可能没有包含文件路径的额外行?我知道你正忙于其他项目,所以我会继续,并将问题标记为已回答。再次感谢,DWIC@DWICBIOOM-我之前的编辑打算将stdout重定向到stdin,但我忘记了
&1
之前的
2
。当我最初查看您的代码时,我没有理解您的.tx_uuu文件的意图,我恢复了它以避免在输出中包含输出文件。最后,由于管道的工作方式,我遇到了在管道左侧启用ECHO的问题。在我的回答中,所有问题都在代码中得到了解决。编辑-添加了关于错误的讨论,并在代码中重定向了stderr。先生,您是对的!非常感谢。工作文件的标题中有空格,而我家的测试文件没有空格。因此,我能够在我的家用电脑上复制错误,这当然意味着它毕竟不是Windows7的问题。虽然,我对你的剧本有一些问题,似乎无法靠我自己解决。除非最后删除“&>1”,否则脚本将无法工作。这样做之后,我的输出结果如下:
C:\Documents And Settings\Admin\Desktop\Macro(misc)projects\BAT\Test Folder>(echo Filename:-output.txt&echo&echo.&type“-output.txt”&echo&echo。)Filename:-output.txt C:\Documents And Settings\Admin\Desktop\Macro(misc)projects\BAT\Test Folder>(echo文件名:Test 1.txt&echo&echo&键入“Test 1.txt”&echo&echo。)文件名:Test 1.txt[文本文件1内容]。。。等等。
如果你不介意再帮我一次的话。。。我很好奇是否有可能没有包含文件路径的额外行?我知道你正忙于其他项目,所以我会继续,并将问题标记为已回答。再次感谢,DWIC@DWICBIOOM-我之前的编辑打算将stdout重定向到stdin,但我忘记了
&1
之前的
2
。当我最初查看您的代码时,我没有理解您的.tx_uuu文件的意图,我恢复了它以避免在输出中包含输出文件。最后,由于管道的工作方式,我遇到了在管道左侧启用ECHO的问题。在我的回答中,代码中的所有内容都已修复。