如何在PowerShell中用通配符将多文件存入数组并批量执行命令?
修正PowerShell遍历Datafile_*.txt文件的脚本问题
我来帮你搞定这个脚本的问题~ 你的原代码没达到预期效果,主要是因为没有实际去系统中匹配文件,只是把字符串放进了数组,而且变量$Datafile也没正确赋值。下面给你几种正确的实现方式:
方法一:基础版(当前目录下匹配文件)
直接用Get-ChildItem命令获取所有符合Datafile_*.txt格式的文件,然后遍历处理:
# 获取当前目录下所有Datafile_开头的txt文件(只取文件,排除目录) $Files = Get-ChildItem -Path "Datafile_*.txt" -File foreach ($File in $Files) { # 这里写你的具体操作,比如输出文件完整路径 Write-Host "正在处理文件: $($File.FullName)" # 示例:读取文件内容 # $fileContent = Get-Content $File.FullName # Do something.... }
方法二:指定目标路径
如果文件不在当前工作目录,你可以指定具体路径:
# 定义文件所在的目标路径 $targetDirectory = "C:\Your\File\Path" # 匹配目标路径下的Datafile_*.txt文件 $Files = Get-ChildItem -Path "$targetDirectory\Datafile_*.txt" -File foreach ($File in $Files) { # 执行你的操作逻辑 Write-Host "处理文件: $($File.Name)" }
方法三:更简洁的写法
可以直接把Get-ChildItem放进foreach循环里,省去中间变量:
foreach ($File in Get-ChildItem -Path "Datafile_*.txt" -File) { # 你的操作代码 Write-Host "正在处理: $($File.BaseName)" }
原代码的问题说明
- 你没有给
$Datafile变量赋值,所以拼接后得到的是"*.txt",而不是预期的"Datafile_*.txt" - 就算
$Datafile赋值为"Datafile_",$FileName=$Datafile + "*.txt"只是生成了一个字符串,Files=@($FileName)只是把这个字符串装进数组,并没有去系统中查找实际存在的文件,所以你的foreach循环其实是在遍历这个字符串,而不是真正的文件对象。
内容的提问来源于stack exchange,提问作者SQL_Rookie
相关产品推荐
相关产品推荐

