Windows 在所有子目录中显示具有相同文件名的多个.txt文件的内容

Windows 在所有子目录中显示具有相同文件名的多个.txt文件的内容,windows,batch-file,cmd,Windows,Batch File,Cmd,我在不同的子目录下有多个具有相同文件名的文件,例如: c:\kjhsd\client.txt c:\ekjjs\client.txt c:\oiwnk\client.txt 我不知道上面用随机字母表示的路径的中间部分,但文件名总是一致的 我需要一种使用此命令的方法:键入client.txt(或)more client.txt,但同时在任何目录下显示文件名为“client.txt”的所有文本文件的内容 因此,如果: c:\kjhsd\client.txt包含:hello c:\ekjjs\cl

我在不同的子目录下有多个具有相同文件名的文件,例如:

c:\kjhsd\client.txt
c:\ekjjs\client.txt
c:\oiwnk\client.txt

我不知道上面用随机字母表示的路径的中间部分,但文件名总是一致的

我需要一种使用此命令的方法:
键入client.txt
(或)
more client.txt
,但同时在任何目录下显示文件名为“client.txt”的所有文本文件的内容

因此,如果:

c:\kjhsd\client.txt包含:
hello

c:\ekjjs\client.txt
包含:
helloworld

c:\oiwnk\client.txt
包含:
helloagain

运行单个命令后,我会看到:

hello
helloworld
helloagain

提前感谢:)

来自
cmd.exe

@for /r c:\ %a in ("client.txt") do @type "%~a"2>nul
从批处理文件

@for /r c:\ %%a in ("client.txt") do @type "%%~a"2>nul
根据换行要求编辑:

@echo off
Pushd "c:\somedir"
for /f %%a in ('dir /b /s /a-d ^| find /i "client.txt"') do (
    type "%%~a"2>nul
    echo(
)
Popd
或者,如果要查看哪个文件包含什么文本:

@echo off
Pushd "c:\somedir"
for /f %%a in ('dir /b /s /a-d ^| find /i "client.txt"') do (
    echo content: "%%~a"
    type "%%~a"2>nul
    echo(
)
Popd

cmd.exe

@for /r c:\ %a in ("client.txt") do @type "%~a"2>nul
从批处理文件:

@for /r c:\ %%a in ("client.txt") do @type "%%~a"2>nul
根据换行要求编辑:

@echo off
Pushd "c:\somedir"
for /f %%a in ('dir /b /s /a-d ^| find /i "client.txt"') do (
    type "%%~a"2>nul
    echo(
)
Popd
或者,如果要查看哪个文件包含什么文本:

@echo off
Pushd "c:\somedir"
for /f %%a in ('dir /b /s /a-d ^| find /i "client.txt"') do (
    echo content: "%%~a"
    type "%%~a"2>nul
    echo(
)
Popd

最简单的方法是使用查找不同的目录,并允许返回文件的内容,因为如果文件本身没有断行符,则会自动在每个文件中追加一个断行符(与之相反)

在命令提示符下执行以下操作:

@for/D%I in(“D:\some\root\*”)do@(<“%I\client.txt”find/V“)2>nul
在批处理文件中,执行以下操作:

@for/D%%I in(“D:\some\root\*”)do@(<“%%~I\client.txt”find/V“)2>nul

如果目录不包含名为
client.txt

的文件,则该部分会抑制eerror消息。最简单的方法是使用查找不同的目录,并让返回文件的内容,因为如果文件本身没有断行符,则会自动将断行符附加到每个文件(反对)

在命令提示符下执行以下操作:

@for/D%I in(“D:\some\root\*”)do@(<“%I\client.txt”find/V“)2>nul
在批处理文件中,执行以下操作:

@for/D%%I in(“D:\some\root\*”)do@(<“%%~I\client.txt”find/V“)2>nul

如果目录中不包含名为
client.txt

的文件,则该部分会抑制错误消息。非常感谢Gerhard!这是可行的,但它不会在文本文件之间放置特征线。因此,我得到的等价物是:hellohelloworldagaina break line?因此,在上一个文件结果结束后,每次都需要换行ed?谢谢Gerhard!此批处理需要从父目录运行,对吗?是否有任何地方可以指定不同的父根目录,以便批处理文件可以从Elsware运行?再次感谢!我一看到您的更新就脸红了。我应该知道只需使用pushd!对不起!非常感谢:)非常感谢Gerhard!这是可行的,但不会在文本文件之间放置特征线。所以我得到了一个等价物:hellohelloworldagaina break line?所以你想在以前的文件结果结束后每次换行吗?谢谢Gerhard!此批处理需要从父目录运行,对吗?是否有任何地方可以指定不同的父根,以便可以从Elsware运行批处理文件?再次感谢!我一看到你的最新消息就脸红了。我早该知道怎么简单地使用pushd!很抱歉非常感谢:)aschipfl,我感觉这不是在寻找“任何目录”,即完全递归Yes@Compo,这种行为是故意的,因为问题中的介绍和示例目录/文件……是的,这些示例只建议一个级别。感谢您澄清.aschipfl,我感觉这不是在寻找“任何目录”,即完全递归是@Compo,这种行为是故意的,因为问题中的介绍和示例目录/文件……是的,这些示例只建议一个级别。谢谢你的澄清。