Я пытаюсь переместить файлы в определенную папку, если они начинаются с буквы, и удалить их, если они начинаются с чего-либо, кроме буквы.
Мой код:
Function moveOrDelete($source, $dest)
{
$aToZ = '^[a-zA-Z].*'
$notALetter = '^[^a-zA-Z].*'
Get-ChildItem -Path $source\$aToZ -Recurse | Move-Item -Destination $dest
Get-ChildItem -Path $source\$notALetter -Recurse | Remove-Item
}
Насколько я понимаю, каретка будет соответствовать первому символу, когда он выходит за скобки. Другими словами, регулярное выражение в переменной $aToZ
будет соответствовать всему, что начинается с буквы. часть .*
позволит остальной части имени файла быть любым. Символ каретки внутри скобок отрицает оператор, поэтому, если имя файла начинается с чего-либо, кроме буквы, оно будет соответствовать. Я не могу заставить это работать, и я не получаю никаких ошибок, которые заставляют меня полагать, что мое регулярное выражение неверно.
Я проверил это с помощью онлайн-инструментов, включая этот: https://regex101.com/, и они проверены.
Я также использовал такие варианты регулярных выражений, как ^[a-zA-Z]
, которые не работают. Некоторые шаблоны, например [a-zA-Z]*
, перемещают файлы, но это не тот шаблон, который мне нужен.
Вот как я называю функцию:
moveOrDelete ".\source" ".\dest"
И вот примеры имен файлов, которые я использую:
a.txt
z.txt
1.txt
.txt