Powershell — использование подстановочных знаков для поиска имени файла

Я пытаюсь создать сценарий PowerShell, который будет искать в папке имя файла, содержащее определенную маску файла. Все файлы в папке будут иметь формат *yyyyMd*.txt.

Я сделал скрипт:

[String]$date = $(get-date -format yyyyMd)
$date1 = $date.ToString
Get-ChildItem C:\Users\pelam\Desktop\DOM | Where-Object {$_.Name -like '*$date1*'}

Но это, кажется, не работает.

Кто-нибудь может помочь? Кажется, проблема в том, что переменная даты неверна, потому что, когда я жестко кодирую что-то вроде ниже, это работает:

Get-ChildItem C:\Users\pelam\Desktop\DOM | Where-Object {$_.Name -like '*20141013*'}

person Phil E    schedule 14.10.2014    source источник
comment
Одинарные кавычки заставляют его пытаться сопоставить литровую строку «$ date1». Используйте двойные кавычки, чтобы включить расширение переменной в строке.   -  person mjolinor    schedule 14.10.2014
comment
Или еще лучше, не заключайте в кавычки ссылку на переменную, которая уже является строкой, например. ... | Where-Object {$_.Name -like $date1} :-)   -  person Keith Hill    schedule 14.10.2014
comment
Спасибо, парни! Это сработало! Я не использовал двойные кавычки вместо одинарных.   -  person Phil E    schedule 14.10.2014
comment
Используйте одинарные кавычки внутри двойных кавычек ('$date1'), если $date1 может содержать встроенные пробелы.   -  person mjolinor    schedule 14.10.2014


Ответы (1)


Вы можете упростить это, просто используя регулярное выражение с оператором -match:

Get-ChildItem C:\Users\pelam\Desktop\DOM | Where-Object {$_ -match (Get-Date -format yyyyMMdd)}

И если вы используете V3 или выше, вы можете еще больше упростить:

Get-ChildItem C:\Users\pelam\Desktop\DOM | Where Name -match (Get-Date -format yyyyMMdd)
person Keith Hill    schedule 14.10.2014
comment
Кажется, это может сработать. Но имя файла будет что-то вроде «medical20141014-12345.txt». Так что мне нужно, чтобы получить? yyyyMd?. Так что он может найти любые файлы, которые содержат текущую дату. Это выполнимо с -match? - person Phil E; 14.10.2014
comment
Ладно, сегодня я идиот. Обновленный ответ будет работать, и природа -match и результирующий шаблон регулярного выражения найдут строку даты в любом месте имени файла. - person Keith Hill; 14.10.2014