Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用批处理查找带有通配符的文件并将名称打印到另一个文件_Loops_Batch File_Wildcard - Fatal编程技术网

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

Loops 使用批处理查找带有通配符的文件并将名称打印到另一个文件,loops,batch-file,wildcard,Loops,Batch File,Wildcard,我的问题是,我想用通配符搜索一个文件夹,然后在另一个批处理文件中打印文件名。例如:c:\docs\hello.txt(我想用*.txt搜索条件查看这个文件夹,然后用设置的文件名将这个“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 search.ba

我的问题是,我想用通配符搜索一个文件夹,然后在另一个批处理文件中打印文件名。例如:c:\docs\hello.txt(我想用*.txt搜索条件查看这个文件夹,然后用设置的文件名将这个“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
search.bat:

@echo off&setlocal
对于(*.txt)中的/r“%~dp0”%%a,请调用env.bat“%~nxa”
环境蝙蝠:

@echo off&setlocal
设置“文件名=%~1”
回显%filename%
search.bat将在脚本所在的目录中递归搜索*.txt。对于每个匹配项,都会使用filename.txt参数调用env.bat(不带完整路径。如果需要完整路径,请将
“%%~nxa”
更改为
“%%~fa”
。有关详细信息,请参阅控制台窗口中的
帮助以获取
。)然后,env.bat回显它设置的变量


作为一个学术练习,还可以通过stdin而不是脚本参数传递“filename.txt”

search.bat:

@echo off&setlocal
对于(*.txt)do(@echo%%~nxa | env.bat)中的/r“%~dp0”%%a
环境蝙蝠

@echo off&setlocal
设置/P“文件名=”
回显%filename%

对于Eric J.,以下是在powershell中编写的相同脚本。首先是参数方法:

search.ps1

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

set executionpolicy remotesigned
param(
[字符串]$filename
)
$filename
接下来是stdin方法

search.ps1

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

set executionpolicy remotesigned
[字符串]$filename=$input
$filename

似乎有效,问题是什么?为什么要将输出重定向到文本文件。只需使用CALL命令执行
env.bat
文件,并将
FOR
变量
%%a
作为命令行参数传递给批处理文件。我想使用filelist.txt文件中的名称作为文件名变量。此文件e还为我提供了文件的完整路径,我只需要文件名。TXT您能否举例说明如何使用for%%a作为参数从通配符搜索中获取文件名。谢谢键入/?,例如
%%~nxA
,它是名称和扩展名。