【问题标题】:using batch to find files with a wildcard and print the name to another file使用批处理查找带有通配符的文件并将名称打印到另一个文件
【发布时间】:2016-02-08 19:47:10
【问题描述】:

我的问题是我想用通配符搜索文件夹,然后在另一个批处理文件中打印文件名。例如: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

【问题讨论】:

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

标签: loops batch-file wildcard


【解决方案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 然后回显它设置的变量。


作为一个学术练习,也可以通过标准输入传递“filename.txt”而不是作为脚本参数。

搜索.bat:

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

env.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

接下来是标准输入方法。

搜索.ps1

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

env.ps1

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

$filename

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-18
    • 1970-01-01
    • 2011-05-15
    • 2016-01-04
    • 2015-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多