使用批处理查找带有通配符的文件并将名称打印到另一个文件

问题描述 投票:0回答:1

我的问题是我想用通配符搜索文件夹,然后在另一个批处理文件中打印文件名。例如:c:\docs\hello.txt(我想使用 *.txt 搜索条件浏览此文件夹,然后使用 set filename=

将此“hello.txt”传递到我的 env.bat

到目前为止我可以得到如下文件名:

echo off
cd %1
if exist filelist.txt del filelist.txt
for /r %%a in (*.txt) do echo %%a > filelist.txt
loops batch-file wildcard
1个回答
1
投票

搜索.bat:

@echo off & setlocal
for /r "%~dp0" %%a in (*.txt) do call env.bat "%%~nxa"

env.bat:

@echo off & setlocal
set "filename=%~1"

echo %filename%

search.bat
将递归搜索脚本所在的目录以查找
*.txt
。对于每场比赛,都会使用 filename.txt 参数调用
env.bat
(没有完整路径,如果您需要完整路径,请将
"%%~nxa"
更改为
"%%~fa"
。有关详细信息,请参阅控制台窗口中的
help for
) .)
env.bat
然后回显它设置的变量。


就像一项学术练习一样,也可以通过 stdin 而不是作为脚本参数传递

filename.txt

搜索.bat:

@echo off & setlocal
for /r "%~dp0" %%a in (*.txt) do (@echo %%~nxa|env.bat)

环境.bat

@echo off & setlocal
set /P "filename="

echo %filename%

对于 Eric J.,这里是用 powershell 编写的相同脚本。首先是论证方法:

搜索.ps1

set-executionpolicy remotesigned
gci -recurse -filter *.txt | %{ .\env.ps1 $_.Name }

env.ps1

set-executionpolicy remotesigned
param (
    [string]$filename
)

$filename

接下来是 stdin 方法。

搜索.ps1

set-executionpolicy remotesigned
gci -recurse -filter *.txt | %{ $_.Name | .\env.ps1 }

env.ps1

set-executionpolicy remotesigned
[string]$filename = $input

$filename
© www.soinside.com 2019 - 2024. All rights reserved.