
У меня возникла проблема, которая, как мне кажется, заключается в том, чтоКак удалить файлы с указанным текстом в названии?удалил бы то, что не хочу удалять.
Из-за проблемы с OneDrive после установки дополнительного внутреннего жесткого диска и перемещения моей папки OneDrive в соответствии с инструкциями по адресуПоддержка Майкрософт, Я не знаю, что я сделал не так, но теперь все мои файлы скопированы на мой новый жесткий диск, и OneDrive синхронизируется с дубликатами каждого файла с - copy
на конце каждого имени файла перед расширением. Это гигабайты данных по тысячам файлов.
Если посмотреть, что будет удалено при использовании *- copy.*
Powershell или cmd.exe, то, похоже, будет удален созданный мной файл (copy.bat), а я хочу его сохранить.
Как использовать подстановочные знаки, чтобы удалить все, что находится - copy
в конце имени файла, но защитить файлы, такие как copy.bat?
решение1
В данный момент происходит то, что ваш *- copy.*
файл анализируется как два аргумента, разделенных пробелом: *-
и copy.*
. Как только вы это увидите, будет легко понять, что второй из них будет соответствовать вашему copy.bat
файлу.
Исправление заключается в том, чтобы заключить инвариантную часть в двойные кавычки (в частности, убедившись, что пробел находится внутри двойных кавычек) *"- copy".*
:
DIR *"- copy".*
Get-ChildItem *"- copy".*
Поскольку это Windows, вы можете обойтись без кавычек *
, поскольку они анализируются командой, а не инструментом Powershell/CMD:
DIR "*- copy.*"
Get-ChildItem "*- copy.*"
Кстати, если вы собираетесь использовать систему на базе UNIX/Linux (включая Mac), не привыкайте заключать в кавычки подстановочные знаки и ожидать, что они будут работать как шаблон, потому что этого не произойдет: они будут интерпретированы как буквальная звездочка. Мое первое предложение будет работать везде. Второе предложение касается только Windows.
решение2
Файл .bat
не обязательно должен находиться в той же папке, что и удаляемые файлы. Вы можете запустить его из другой папки, запустив
\path\copy.bat
.
Если затронуты и другие файлы, помимо copy.bat
, вам необходимо скопировать их в другое место перед запуском copy.bat
.
Вы также можете использовать в PowerShell более сложные выражения регулярных выражений, чем примитивные, доступные в CMD. Затем вы можете усовершенствовать регулярное выражение, включив меньше файлов, если вы можете лучше определить их правила именования.
решение3
Ознакомьтесь с полезным бесплатным инструментом — утилитой массового переименования.https://www.bulkrenameutility.co.uk
Он может рекурсивно сканировать и просматривать задачи массового переименования и чрезвычайно полезен, поскольку имеет предварительный просмотр. Будьте осторожны — сначала вам нужно сделать резервную копию. Это мощный инструмент, и после фиксации нет возможности отменить действие.