Удалить файлы содержащие строку
Командлет Remove-Item удаляет один или несколько элементов. Так как она поддерживается многими поставщиками, она может удалять различные типы элементов, включая файлы, папки, разделы реестра, переменные, псевдонимы и функции.
Примеры
Пример 1. Удаление файлов с любым расширением имени файла
В этом примере удаляются все файлы с именами, включающими точку ( . ) из C:\Test папки. Так как команда задает точку, команда не удаляет папки или файлы без расширения имени файла.
Пример 2. Удаление некоторых файлов документов в папке
В этом примере удаляются из текущей папки все файлы, имеющие .doc расширение имени файла и имя, которое не содержит *1* .
Он использует подстановочный знак ( * ) для указания содержимого текущей папки. Он использует параметры Include и Exclude для указания удаляемого файла.
Пример 3. Удаление скрытых файлов, доступных только для чтения
Эта команда удаляет файл, который является скрытым и доступным только для чтения.
Для указания файла используется параметр Path . Для удаления используется параметр Force . Без принудительного удаления не удается удалить файлы только для чтения или скрытые файлы.
Пример 4. Рекурсивное удаление файлов во вложенных папках
Эта команда удаляет все CSV-файлы в текущей папке и все вложенные папки рекурсивно.
Так как параметр Recurse имеет известную проблему, команда в Remove-Item этом примере используется Get-ChildItem для получения нужных файлов, а затем использует оператор конвейера для их передачи Remove-Item .
В команде Get-ChildItem Path имеет значение ( * ), представляющее содержимое текущей папки. Он использует include для указания типа CSV-файла и использует recurse для рекурсивного извлечения. При попытке указать путь к файлу, например -Path *.csv , командлет интерпретирует тему поиска как файл без дочерних элементов, а рекурс завершается ошибкой.
Это поведение было исправлено в Windows версиях 1909 и более поздних версий.
Пример 5. Рекурсивное удаление подразделов
Эта команда удаляет раздел реестра OldApp и все его подразделы и значения. Он используется для Remove-Item удаления ключа. Указан путь, но имя необязательного параметра (Path) опущено.
Параметр Recurse удаляет все содержимое ключа OldApp рекурсивно. Если ключ содержит подразделы и не указан параметр Recurse , вам будет предложено подтвердить удаление содержимого ключа.
Пример 6. Удаление файлов с помощью специальных символов
В следующем примере показано, как удалить файлы, содержащие специальные символы, такие как скобки или скобки.
Пример 7. Удаление альтернативного потока данных
В этом примере показано, как использовать динамический параметр Stream командлета Remove-Item для удаления альтернативного потока данных. Параметр потока представлен в Windows PowerShell 3.0.
Параметр Get-Item Stream получает Zone.Identifier поток Copy-Script.ps1 файла. Remove-Item использует параметр Stream для удаления Zone.Identifier потока файла. Наконец, командлет показывает, Get-Item что Zone.Identifier поток был удален.
Параметры
Запрос подтверждения перед выполнением командлета. Дополнительные сведения см. в следующих статьях:
Этот параметр не поддерживается поставщиками, установленными с помощью PowerShell. Чтобы олицетворять другого пользователя или повысить свои учетные данные при выполнении этого командлета, используйте Invoke-Command.
Type: | PSCredential |
Position: | Named |
Default value: | Current user |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Указывает, как массив строк, элемент или элементы, которые этот командлет исключает в операции. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например *.txt . Можно использовать подстановочные знаки. Параметр Exclude действует только в том случае, если команда содержит содержимое элемента, например C:\Windows\* , где подстановочный знак указывает содержимое C:\Windows каталога.
При использовании recurse с exclude, exclude only filters results of the current directory. Если в вложенных папках есть файлы, соответствующие шаблону Exclude , эти файлы удаляются вместе с родительским каталогом.
Type: | String [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | True |
Указывает фильтр для уточнения параметра Path . Поставщик FileSystem — единственный установленный поставщик PowerShell, который поддерживает использование фильтров. Синтаксис языка фильтрации Файловой системы можно найти в about_Wildcards. Фильтры более эффективны, чем другие параметры, так как поставщик применяет их, когда командлет получает объекты, а не фильтрует объекты PowerShell после их извлечения.
Type: | String |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | True |
Заставляет командлет удалять элементы, которые не могут быть изменены, например скрытые или доступные только для чтения файлы или псевдонимы только для чтения или переменные. С помощью этого командлета нельзя удалять постоянные псевдонимы или переменные. Применение этого параметра зависит от конкретного поставщика. Дополнительные сведения см. в разделе about_Providers. Даже при использовании параметра Force командлет не может переопределить ограничения безопасности.
Type: | SwitchParameter |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Указывает, как массив строк, элемент или элементы, которые этот командлет включает в операцию. Значение этого параметра определяет параметр Path. Введите элемент пути или шаблон, например "*.txt" . Можно использовать подстановочные знаки. Параметр Include действует только в том случае, если команда включает содержимое элемента, например C:\Windows\* , где подстановочный знак указывает содержимое C:\Windows каталога.
Type: | String [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | True |
Указывает путь к одному или нескольким расположениям. Значение LiteralPath используется точно так же, как оно введено. Никакие символы не интерпретируются как знаки подстановки. Если путь содержит escape-символы, заключите его в одинарные кавычки. Одинарные кавычки говорят PowerShell, что никакие символы не интерпретируются как escape-последовательности.
Type: | String [ ] |
Aliases: | PSPath |
Position: | Named |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | False |
Указывает путь к удаляемым элементам. Можно использовать подстановочные знаки.
Type: | String [ ] |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True |
Accept wildcard characters: | True |
Указывает, что этот командлет удаляет элементы в указанных расположениях и во всех дочерних элементах расположений.
Параметр Recurse может не удалять все вложенные папки или все дочерние элементы. Это известная проблема
Это поведение было исправлено в Windows версиях 1909 и более поздних версиях.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Параметр Stream — это динамический параметр, к которому Remove-Item добавляет поставщик FileSystem. Этот параметр работает только на дисках с файловой системой.
Можно использовать для Remove-Item удаления альтернативного потока данных, например Zone.Identifier . Однако не рекомендуется отменять проверки безопасности, которые блокируют файлы, загруженные из Интернета. Если вы убедитесь, что скачанный файл является безопасным, используйте Unblock-File командлет.
Этот параметр впервые появился в Windows PowerShell 3.0.
Type: | String [ ] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | True |
Включает команду в активную транзакцию. Этот параметр доступен только при выполнении транзакции. Дополнительные сведения см. в разделе about_Transactions
Type: | SwitchParameter |
Aliases: | usetx |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Показывает, что произойдет при запуске командлета. Командлет не выполняется.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
В этот командлет можно передать строку, содержащую путь, но не литеральный путь.
Выходные данные
Нет
Этот командлет не возвращает никакие выходные данные.
Примечания
Командлет Remove-Item предназначен для работы с данными, предоставляемыми любым поставщиком. Чтобы вывести список поставщиков, доступных в данном сеансе, введите командлет Get-PsProvider . Дополнительные сведения см. в разделе about_Providers.
При попытке удалить папку, содержащую элементы без использования параметра Recurse , командлет запрашивает подтверждение. Использование -Confirm:$false не подавляет запрос. Это сделано намеренно.
Как бы я использовал sed, чтобы удалить все строки в текстовом файле, которые содержат определенную строку?
Чтобы удалить строку и распечатать вывод на стандартный вывод:
Чтобы напрямую изменить файл - не работает с BSD sed:
То же самое, но для BSD sed (Mac OS X и FreeBSD) - не работает с GNU sed:
Чтобы напрямую изменить файл (и создать резервную копию) - работает с BSD и GNU sed:
Спасибо, но он, кажется, не удаляет его из файла, а просто распечатывает содержимое текстового файла без этой строки.
Для некоторого аромата sed; Флаг sed "-i" требовал предоставления расширения. (например sed -i.backup '/pattern to match/d' ./infile ) Это помогло мне с правками на месте.
Еще одно замечание для пользователей Mac OS X: по какой-то причине флаг -i требует передачи аргумента, даже если это просто пустая строка, например sed -i '' '/pattern/d' ./infile .
Есть много других способов удалить строки с определенной строкой, кроме sed :
Рубин (1,9+)
Shell (Баш 3.2 и позже)
GNU grep
И конечно sed (обратная печать выполняется быстрее, чем фактическое удаление):
Как удалить конкретную линию с рисунком, а также линию непосредственно над ним? У меня есть штраф с тысячами таких строк между различными данными.
sed пример имеет различное поведение, он только отбирает! это должно быть что-то вроде sed -n -i '/pattern/!p' file .
Версия grep не работает, когда каждая строка соответствует шаблону. Лучше сделать: grep -v "pattern" file > temp; mv temp file это может относиться к некоторым другим примерам в зависимости от возвращаемого значения.
«обратная печать выполняется быстрее, чем фактическое удаление» - не на моем компьютере (2012 MacBook Air, OS X 10.13.2). Создать файл: seq -f %f 10000000 >foo.txt . sed d: time sed -i '' '/6543210/d' foo.txt реальный 0m9.294s. sed! p: time sed -i '' -n '/6543210/!p' foo.txt реальный 0m13.671s. (Для файлов меньшего размера разница больше.)
Вы можете использовать sed для замены строк в файле. Тем не менее, это выглядит намного медленнее, чем использование grep для обратного преобразования во второй файл, а затем перемещение второго файла поверх оригинала.
В любом случае, первая команда на моей машине занимает в три раза больше времени.
Мне интересно, какая разница в производительности, если бы это было sed '/pattern/d' filename > filename2; mv filename2 filename
(используя ubuntu / usr / share / dict / words) grep и mv: 0.010s | сед на месте: 0,197 с | sed и mv: 0,031 с
Самый простой способ сделать это с помощью GNU sed :
+1 за --in-place флаг. Мне нужно проверить это на разрешениях защищенных файлов. (нужно сделать некоторую пользовательскую чистку.)
Обратите внимание, что опция long доступна только в GNU sed. Пользователи Mac и BSD должны будут установить gsed, чтобы сделать это таким образом.
Другой совет: если ваше регулярное выражение не соответствует, попробуйте -r вариант (или -E , в зависимости от вашей версии). Это позволяет использовать регулярные выражения метасимволов + , ? , <. >и (. ) .
Это правильный ответ, когда на вашем диске больше нет места, и вы не можете скопировать текст в другой файл. Эта команда делает то, что было опрошено?
Вы можете рассмотреть возможность использования ex (это стандартный редактор на основе команд Unix):
- + выполняет данную команду Ex ( man ex ), так же как и -c выполняющуюся wq (запись и выход)
- g/match/d - Ex команда для удаления строк с данными match , см .: Мощность g
Приведенный выше пример представляет собой POSIX-совместимый метод для редактирования файла на месте согласно этому посту в спецификациях Unix.SE и POSIX для ex .
Разница в sed том, что:
sed является редактором S Tream ED , а не редактором файлов. BashFAQ
Если вы не наслаждаетесь непереносимым кодом, накладными расходами ввода / вывода и некоторыми другими плохими побочными эффектами. Поэтому в основном некоторые параметры (например, на месте / -i ) являются нестандартными расширениями FreeBSD и могут быть недоступны в других операционных системах.
:g является POSIX-совместимой командой с некоторыми небольшими отличиями . Я предполагаю, что PCRE был основан на этом.
Я боролся с этим на Mac. Плюс, мне нужно было сделать это с помощью замены переменных.
Поэтому я использовал:
sed -i '' "/$pattern/d" $file
где $file файл, в котором требуется удаление, и $pattern шаблон, который необходимо сопоставить для удаления.
Я выбрал '' из этого комментария .
Дело в том, чтобы отметить здесь является использование двойных кавычек в "/$pattern/d" . Переменная не будет работать, когда мы используем одинарные кавычки.
Mac sed требует параметр после -i , поэтому, если вы не хотите создавать резервную копию, вам все равно нужно добавить пустую строку: -i ''
Скажем, есть переменная с именем %pathtofolder% , которая проясняет, что это полный путь к папке.
Я хочу удалить все файлы и подпапки в этом каталоге, но не сам каталог.
Но может быть ошибка типа «этот файл / папка уже используется» . когда это происходит, нужно просто продолжить и пропустить этот файл / папку.
Есть ли какая-то команда для этого?
Это безумие, как трудно Windows удалить папки . Или создать папку, начинающуюся с точки . Слава богу за интеграцию Bash в Windows! rm -rf path\to\folder работает в Windows 10 (или может прийти из Git Bash . в любом случае, если у вас есть, что стоит попробовать!)
Вы можете использовать этот скрипт для очистки папки и файлов в C:\Temp исходном коде :
Создайте пакетный файл (скажем, delete.bat), содержащий указанную выше команду. Перейдите в папку, в которой находится файл delete.bat, а затем выполните команду: delete.bat
Я пробовал, но, к сожалению, файлы, которые не были удалены, удаляются только подпапки. Например, у меня есть папка с именем Test. Он содержит 2 папки с именами «Ripon» и «Wasim» и содержит файл с именем «riponalwasim.txt». Подпапки Ripon и Wasim были удалены, но riponalwasim.txt не был удален.
Используйте одиночный знак процента, если вы хотите работать напрямую из командной строки, например %p
Грустно, что это занимает 2 строки, но, по крайней мере, это работает! Я устал искать работающий «однострочник» и пойду с этим, спасибо!
Вы можете использовать оператор «&&» для выполнения двух команд в одной строке без файла bat (обратите внимание на один «%» вместо «%%»). del / s / q "myfolder *" && FOR / D% p IN ("myfolder *") DO rmdir "% p" / s / q
rmdir моя самая любимая команда для работы. Он работает для удаления огромных файлов и папок с подпапками. Резервная копия не создается, поэтому перед выполнением этой команды убедитесь, что вы скопировали свои файлы безопасно.
Это автоматически удаляет папку и все файлы и подпапки.
Это приведет к удалению самой папки, поэтому вам нужно добавить еще одну команду: md FOLDERNAME (см. Ответ от @rakoczyn ниже).
Что вы подразумеваете под «резервное копирование создано» здесь? Я не вижу ничего, что могло бы создать какую-либо резервную копию .
Чтобы не удалять саму папку, сделайте ее текущей папкой, а затем используйте «.» как FOLDERNAME. Повторное создание этого впоследствии не обязательно то же самое, потому что ACL могли быть потеряны. cd "FOLDERNAME" RD . /S /Q
Самое простое решение, которое я могу придумать, - это удалить весь каталог с помощью
Затем создайте этот каталог снова:
Что делать, если у вас есть разрешение на удаление, но не создание новых папок? Я надеюсь, что это возможно :)
Это плохое решение, так как оно приводит к гонке в файловой системе за узел каталога, то есть вторая команда может потерпеть неудачу, если выполняется сразу после нее.
Кроме того , плохое решение , если каталог имеет специальные разрешения , которые вы просто Nuked гм (упс)
RD и RMDIR - это одна и та же команда, и, поскольку вы опубликовали этот ответ через 9 месяцев после того, как кто-то дал тот же ответ, почему люди дают вам очки?
Это удалит папки и файлы и оставит папку позади.
Для тех, кто не уверен в этом подходе: он определенно не создает каталог заново. Без 2>nul него выводится «Процесс не может получить доступ к файлу, потому что он используется другим процессом».
Я ненавижу, что Windows не может удалить файлы и папки, используемые какой-либо программой. И мне нравится, что вы использовали это в свою пользу в этой строчке.
@mlvljr Только если вы хотите сохранить родительскую папку тоже. RD /? покажет вам простой способ очистить папку.
Это хорошо, если вам нужно вернуться на исходную позицию, иначе просто CD mypath && RD /S . будет достаточно. Мне не нравится, что вам приходится повторять свой путь дважды, хотя для длинных путей его становится трудно читать. Так что я бы просто добавил set p="mypath" в начале.
. удаляет все файлы и папки в данном каталоге, но не сам каталог.
это должен быть правильный ответ .. просто сделайте простой .. deletemyfoldercontents.bat файл .. вставьте ваш путь, и он работает как шарм ..
В командной строке DEL также отсутствует опция /A для удаления файлов со скрытым набором атрибутов, и %dir%\* их следует заключать в двойные кавычки, как, например, "%dir%\*" для каталогов, содержащих пробел или один из этих символов &()[]<>^=;!'+,`~ . И командную строку FOR следует изменить на, for /F "eol=| delims=" %%I in ('dir "%dir%\*" /AD /B 2^>nul') do rd /Q /S "%dir%\%%I" поскольку FOR игнорирует каталоги со скрытым набором атрибутов. DIR с параметрами /AD /B выводит все каталоги только с их именами. Кстати, dir это не хорошее название для переменной среды.
@RMiranda, в моих тестах, он делает именно так, как просил ОП. У вас есть случай, когда он не удаляет подпапки?
Отвечает ли этот ответ требованию «может быть ошибка типа« этот файл / папка уже используется ». когда это происходит, он должен просто продолжить и пропустить этот файл / папку». ?
Обновление :
Из этого полезного комментария (спасибо Moritz Both ) вы можете добавить && между ними, поэтому RMDIR не запустите, если CD команда не будет выполнена (например, имя каталога с ошибкой):
/ S: удаляет дерево каталогов (указанный каталог и все его подкаталоги, включая все файлы).
/ Q: Указывает тихий режим. Не запрашивает подтверждения при удалении дерева каталогов. (Обратите внимание, что / q работает, только если указан / s.)
Это идеально подходит для очистки temp, но это cd [Your_Folder] очень важно - я должен помнить об этом, чтобы не удалять сам каталог .
Это правильное решение. Добавьте && между командами вместо разрыва строки, и вы в безопасности от сбой CD.
довольно плохое решение . Мне, например, нужно это удаление командной строки для обновления SVN - я хочу удалить все файлы и папки, прежде чем я сделаю обновление SVN, потому что могут быть некоторые изменения на машине, где я использую это, но актуально только проверенные в пунктах. Делать RMDIR / S / Q. также удаляет ссылку SVN и, следовательно, больше не делает папку svn
RD расшифровывается как REMOVE Directory.
/ S: Удалить все файлы и подпапки в дополнение к самой папке. Используйте это, чтобы удалить все дерево папок.
/ Q: Тихо - не отображать подтверждение YN
Отвечает ли этот ответ требованию «может быть ошибка типа« этот файл / папка уже используется ». когда это происходит, он должен просто продолжить и пропустить этот файл / папку.»? Например, прерывается ли он полностью вместо продолжения?
Я использую Powershell
Он удалит содержимое папки, а не саму папку.
Ответ rhellem недавно, но это единственный ответ, который действительно сделает это для меня. (Win 8.1, не по выбору)
Простое решение для единой командной строки, которое, конечно же, также можно использовать в командном файле:
Эта командная строка содержит три команды, выполняемые одна за другой.
Первая команда PUSHD помещает текущий путь к каталогу в стек, а затем создает %PathToFolder% текущий каталог для запуска процесса команды.
Это также работает для путей UNC по умолчанию, поскольку расширения команд включены по умолчанию, и в этом случае PUSHD создает временную букву диска, которая указывает на указанный сетевой ресурс, а затем изменяет текущий диск и каталог, используя вновь определенную букву диска.
Система не может найти указанный путь.
Следующая команда RD выполняется только в том случае, если изменение текущего каталога для текущего командного процесса на указанный каталог прошло успешно, то есть указанный каталог вообще существует.
Команда RD с параметрами /Q и тихо /S удаляет каталог со всеми подкаталогами, даже если указанный каталог содержит файлы или папки со скрытым атрибутом или с установленным атрибутом только для чтения. Системный атрибут никогда не препятствует удалению файла или папки.
Папки, используемые в качестве текущего каталога для любого запущенного процесса. Все дерево папок в такой папке не может быть удалено, если папка используется в качестве текущего каталога для любого запущенного процесса.
Файлы, открытые в настоящее время любым запущенным процессом с правами доступа к файлу, установленными для открытия файла, чтобы предотвратить удаление файла во время открытия работающим приложением / процессом. Такой открытый файл также предотвращает удаление всего дерева папок в открытый файл.
Файлы / папки, для которых у текущего пользователя нет необходимых (NTFS) разрешений на удаление файла / папки, что также предотвращает удаление дерева папок в этот файл / папку.
Процесс не может получить доступ к файлу, потому что он используется другим процессом.
Третья команда, POPD , выполняется независимо от значения выхода команды RD .
POPD извлекает путь каталога, выдвинутый PUSHD из стека, и изменяет текущий каталог для запуска процесса команды на этот каталог, то есть восстанавливает исходный текущий каталог. POPD удаляет временную букву диска, созданную PUSHD в случае пути к папке UNC.
Примечание: POPD может молча прекратить восстановление первоначального текущего каталога в случае, если исходный текущий каталог был подкаталогом каталога для очистки, который больше не существует. В этом особом случае %PathToFolder% остается текущий каталог. Поэтому желательно запускать командную строку выше, а не из подкаталога %PathToFolder% .
Еще один интересный факт: я пробовал в командной строке также использовать UNC-путь, используя общий каталог C:\Temp с именем общего ресурса Temp и используя UNC-путь, \\%COMPUTERNAME%\Temp\CleanTest назначенный переменной среды PathToFolder в Windows 7. Если текущий каталог при запуске командной строки является подкаталогом общего локального каталога папка доступ с помощью UNC - пути, то есть C:\Temp\CleanTest\Subfolder1 , Subfolder1 удаляются с помощью РДА , а следующий POPD терпит неудачу молча делаю C:\Temp\CleanTest\Subfolder1 снова текущий каталог в результате Z:\CleanTest оставшегося в качестве текущего каталога для процесса команды работает. Таким образом, в этом очень особом случае временная буква диска остается до тех пор, пока текущий каталог не будет изменен, например, с помощью cd /D %SystemRoot% в локальный каталог действительно существует. К сожалению, POPD не завершается со значением больше 0, если не удается восстановить исходный текущий каталог, что делает невозможным обнаружение этого особого состояния ошибки, используя только код выхода POPD . Однако можно предположить, что никто никогда не сталкивался с этим особенным случаем ошибки, поскольку пути UNC обычно не используются для доступа к локальным файлам и папкам.
Чтобы лучше понять используемые команды, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте справку, отображаемую для каждой команды.
Теперь давайте посмотрим на решение для пакетных файлов, используя команду DEL для удаления файлов в %PathToFolder% и FOR и RD для удаления вложенных папок в %PathToFolder% .
Пакетный файл сначала гарантирует, что переменная среды PathToFolder действительно определена с путем к папке без двойных кавычек и без обратной косой черты в конце. Обратная косая черта в конце не будет проблемой, но двойные кавычки в пути к папке могут быть проблематичными, поскольку PathToFolder во время выполнения пакетного файла значение объединяется с другими строками.
Важны две строки:
Команда DEL используется для удаления всех файлов в указанном каталоге.
Команды FOR и RD используются для удаления всех подкаталогов в указанном каталоге. Но for /D не используется, поскольку FOR игнорирует в этом случае подкаталоги с установленным атрибутом hidden. По этой причине for /F используется для запуска следующей командной строки в отдельном командном процессе, запущенном в фоновом режиме с помощью %ComSpec% /c :
Оператор перенаправления > должен быть экранирован с помощью символа вставки, ^ в командной строке FOR интерпретироваться как литеральный символ, когда интерпретатор команд Windows обрабатывает эту командную строку перед выполнением команды FOR, которая выполняет встроенную dir командную строку в отдельном запущенном командном процессе. на заднем фоне.
FOR обрабатывает захваченный вывод, записанный для обработки STDOUT запущенного командного процесса, которые являются именами подкаталогов без пути и никогда не заключаются в двойные кавычки.
Параметр FOR with /F игнорирует пустые строки, которые здесь не встречаются, поскольку DIR с параметром /B не выводит пустые строки.
FOR также игнорирует строки, начинающиеся с точки с запятой, которая является символом конца строки по умолчанию. Имя каталога может начинаться с точки с запятой. По этой причине eol=| используется для определения символа вертикальной черты как символа конца строки, который ни один каталог или файл не может иметь в своем имени.
FOR разделит строку на подстроки, используя пробел и горизонтальную табуляцию в качестве разделителей, и назначит только первую строку с пробелом / табуляцией для указанной переменной цикла I . Такое поведение разделения здесь нежелательно, поскольку имя каталога может содержать один или несколько пробелов. Поэтому delims= используется для определения пустого списка разделителей, чтобы отключить поведение разделения строк и получить присвоение переменной цикла I , всегда полное имя каталога.
Команда FOR запускает команду RD для каждого имени каталога без пути, поэтому в командной строке RD необходимо еще раз указать путь к папке, который объединяется с именем подпапки.
Чтобы понять используемые команды и то, как они работают, откройте окно командной строки, выполните там следующие команды и внимательно прочитайте все страницы справки, отображаемые для каждой команды.
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.
этот код удаляет если батник и файл лежат в одном каталоге, а как сделать, чтобы можно было удалить эту строчку со всех файлов с именем your_file.txt лежащих в этом каталоге и подкаталогов. Например со всего диска d?
Конфигурация компьютера | |
Процессор: Intel Core 2 Quad Q9300, 2500 MHz (7,5 x 333) | |
Материнская плата: Asus P5Q PRO | |
Память: Transcend 2048x2 4096 Мб (DDR2-1066 DDR2 SDRAM) | |
HDD: Seagate ST3250410AS (250 Гб, 7200 RPM, SATA-II) + STM31000528AS (1 Тб, 7200 RPM, SATA-II) | |
Видеокарта: Asus EAH3650 (RV635) | |
Звук: Realtek ALC1200 (встроенный) | |
Блок питания: ExeGate 350W | |
CD/DVD: Optiarc DVD RW AD-7170S | |
Монитор: Samsung SyncMaster 971P 19'' | |
ОС: Windows 7 Ultimate SP1 (x64) | |
Индекс производительности Windows: 5,9 |
Здравствуйте, помогите пожалуйста решить задачу
Есть текстовый файл содержащий большое количество строк
нужно удалить строки содержащие определенные слова
пробовал это:
@echo off
SetLocal EnableExtensions EnableDelayedExpansion
set src=1.txt
set dest=1_1.txt
set seek=нужные слова
2>nul del "%dest%"
find /i "%seek%" < "%src%" >"%src%_"
exit /B
и вот это:
@echo off
type 1.txt | find /v /i "Ненужное слово" > file.temp
echo.Y | move file.temp 2.txt
строки удаляются корректно, но:
есть символ в виде квадрата, в начале каждой строки, как я понял это символ переноса строки,
при использовании доступных на этом форуме советов по автоудалению строк,
конечный файл получается без этих самых "квадратиков", хотя строки удаляются корректно
Удаляет один или несколько файлов. Эта команда выполняет те же действия, что и команда Erase .
команда del также может запускаться из консоли восстановления Windows с использованием различных параметров. дополнительные сведения см. в разделе Windows среды восстановления (WinRE).
Если удалить файл с диска с помощью Del , вы не сможете получить его.
Синтаксис
Параметры
- файлы r только для чтения
- h скрытые файлы
- я не проиндексированные файлы содержимого
- системные файлы
- файлы , готовые к архивации
- l точки повторного анализа
- - Используется в качестве префикса, означающего "not"
Комментарии
FileName, Delete (Y/N)?
Чтобы подтвердить удаление, нажмите клавишу Y. Чтобы отменить удаление и отобразить следующее имя файла (если указана группа файлов), нажмите клавишу N. Чтобы закрыть команду Del , нажмите клавиши CTRL + C.
Если вы отключаете расширение команды, параметр /s отображает имена всех файлов, которые не были найдены, а не отображает имена удаляемых файлов.
Если указать определенные папки в параметре, все включаемые файлы также будут удалены. Например, если нужно удалить все файлы в папке \ворк , введите:
Можно использовать подстановочные знаки ( * и ?) для удаления нескольких файлов за раз. Однако во избежание непреднамеренного удаления файлов следует использовать подстановочные знаки с осторожностью. Например, если ввести следующую команду:
Are you sure (Y/N)?
Чтобы удалить все файлы в текущем каталоге, нажмите клавишу Y и нажмите клавишу ВВОД. Чтобы отменить удаление, нажмите клавишу N и нажмите клавишу ВВОД.
Прежде чем использовать подстановочные знаки с командой Del , используйте те же подстановочные знаки с командой dir , чтобы получить список всех файлов, которые будут удалены.
Примеры
Чтобы удалить все файлы в папке с именем Test на диске C, введите следующую команду:
Чтобы удалить все файлы с расширением имени файла .bat из текущего каталога, введите:
Читайте также: