我的问题是我想用通配符搜索文件夹,然后在另一个批处理文件中打印文件名。例如: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
@echo off & setlocal
for /r "%~dp0" %%a in (*.txt) do call env.bat "%%~nxa"
@echo off & setlocal
set "filename=%~1"
echo %filename%
search.bat
将递归搜索脚本所在的目录以查找 *.txt
。对于每场比赛,都会使用 filename.txt 参数调用 env.bat
(没有完整路径,如果您需要完整路径,请将 "%%~nxa"
更改为 "%%~fa"
。有关详细信息,请参阅控制台窗口中的 help for
) .) env.bat
然后回显它设置的变量。
就像一项学术练习一样,也可以通过 stdin 而不是作为脚本参数传递
filename.txt
。
@echo off & setlocal
for /r "%~dp0" %%a in (*.txt) do (@echo %%~nxa|env.bat)
@echo off & setlocal
set /P "filename="
echo %filename%
对于 Eric J.,这里是用 powershell 编写的相同脚本。首先是论证方法:
set-executionpolicy remotesigned
gci -recurse -filter *.txt | %{ .\env.ps1 $_.Name }
set-executionpolicy remotesigned
param (
[string]$filename
)
$filename
接下来是 stdin 方法。
set-executionpolicy remotesigned
gci -recurse -filter *.txt | %{ $_.Name | .\env.ps1 }
set-executionpolicy remotesigned
[string]$filename = $input
$filename