我目前有一些复制软件的反复出现的问题,这需要我根据文件名手动发送一些文件,我试图找到一种自动化的方法,因为远程访问网站的速度很慢。
示例 - 特定文件夹包含许多格式为X123456-000123-X.XML的文件。 '000123'是文件名中唯一的一部分,它会逐渐变化和增加。我可能会收到检索文件的请求,如下所示:
启动文件:X123456-000123-X.XML 上一个文件:X123456-000150-X.XML
这些文件可能位于数千个可以忽略的其他文件的中间。我的Powershell技能是合理的,但我的RegEx并没有让我找不到解决方案。您可以提供任何帮助或想法,我们将不胜感激!
答案 0 :(得分:1)
将匹配120-159的内置范围通配符1[2-5][0-9]
与Where-Object
结合使用,以检查通过正则表达式提取的实际数字或简单的字符串拆分:
Get-ChildItem 'X123456-0001[2-5][0-9]-X.XML' | where {
$index = [int]$_.Name.Split('-')[1]
$index -ge 123 -and $index -le 150
}
如果事先不知道范围,则第一个通配符将为*
,例如'X123456-*-X.XML'
另一种方法是通过指定范围来划分和征服(123-129,130-149,150):
gci 'X123456-00012[3-9]-X.XML', 'X123456-0001[3-4][0-9]-X.XML', 'X123456-000150-X.XML'
您可以编写一个通用函数,为两个任意数字构建这样一个通配符数组。
答案 1 :(得分:1)
如果文件名和序列是可预测的,您可以从头开始生成它,而不是列出数千个文件并尝试解析结果并过滤它们:
$FileNames = 123..150 | ForEach { 'X123456-{0:D6}-X.XML' -f $_ }
这是字符串格式,将数字填充最多六位数;它会产生一个像:
这样的数组X123456-000123-X.XML
X123456-000124-X.XML
X123456-000125-X.XML
...
答案 2 :(得分:0)
一个更简单的版本...
123..150 | %{Get-ChildItem X123456-000 $ _- X.XML}
$ _将扩展为每次从管道中获得的数字。
如果您希望始终在文件名的左侧填充一些ceros,则下面的此版本是更好的解决方案。
123..150 | %{([[string] $ )。PadLeft(6,“ 0”)} | %{Get-ChildItem X123456-$ -X.XML}
或者您可以使用“;”避免在相同范围的数字上循环2次
123..150 | %{$ num =([string] $ _)。PadLeft(6,“ 0”); Get-ChildItem X123456- $ num-X.XML}