Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление файлов в папке и подпапках, содержащих определенную строку

Ответить
Настройки темы
CMD/BAT - [решено] Удаление файлов в папке и подпапках, содержащих определенную строку

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Изменения
Автор: hron66
Дата: 04-12-2013
Добрый день. Уважаемые форумчане, есть проблема. Задача стоит следующим образом: необходимо в конкретной папке и всех подпапках найти и удалить:
1) Пустые (нулевые) файлы
2) Файлы, в которых первый символ - .(точка).
Проблема решена лишь частично, сделано удаление пустых файлов в папке и всех подпапках. А вот с удалением файлов, в которых первый символ - точка, не могу до конца разобраться с синтаксисом, хотя наброски уже есть.
Код: Выделить весь код
@Echo Off
SetLocal
cd /D d:\CSVUpload
For /F "Tokens=*" %%A In ('Dir /B /S /AD 2^>nul^|Sort /R') Do (
        For /F "Tokens=3*" %%B In ('Dir "%%A" /S /A-D /N /-C 2^>nul^|FindStr /irc:":[0-5][0-9] *0"') Do Del /F /Q "%%A\%%C" 2>nul&&Echo:File %%A\%%C deleted.	
        For /F "Tokens=3*" %%B In ('set /p ff=<%%A\%%C') Do IF %ff:~,1% ==. Del /F /Q "%%A\%%C" 2>nul&&Echo:File %%A\%%C deleted.	
)
Во внутреннем цикле 1-я строка - удаление пустых файлов, 2-я строка - удаление файлов, содержащих первый символ точку. Вот в этой строке проблема.
Хотя отдельно от циклов, задача частично решена. Вот код:
Код: Выделить весь код
rem @echo off
set /p ff=<file.txt  
IF %ff:~,1% ==. (echo YES2) else (echo NO2)
pause
Этот код ищет первый символ в файле. Вот этот код я и пытался приладить к основному файлу с циклами.
Помогите, чем сможете..

Отправлено: 10:07, 04-12-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата hron66:
необходимо в конкретной папке и всех подпапках найти и удалить:

2) Файлы, в которых первый символ - .(точка). »
Код: Выделить весь код
del /q /s ".*"
Не?!

Отправлено: 11:40, 04-12-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Я может как то неправильно объяснил. Имелось в ввиду, первый символ точка не в имени файла, а внутри файла. Если мы открываем файл блокнотом например, то внутри первый символ первой строчки - точка.

Отправлено: 11:43, 04-12-2013 | #3


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


hron66, ясно. Файлы текстовые? Кодировка их какая?

Отправлено: 15:41, 04-12-2013 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Файлы обычные текстовые. Кодировка тоже стандартная - cp1251.

Отправлено: 15:55, 04-12-2013 | #5


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


hron66, так?
Код: Выделить весь код
@ECHO OFF
SETLOCAL EnableDelayedExpansion

for /f "delims=" %%a in ('dir /b /s /a-d "c:\1\new\*" ^|find "\."') do echo rd /q "%%~dpa" 2>nul

pause

Отправлено: 17:03, 04-12-2013 | #6


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


sov44, у меня ваш вариант не работает.. И насколько я понял по коду он расчитан на одну папку (без подпапок). И find ищет все точки в файле, а нужно, чтобы искал только первый символ в файле.

Отправлено: 17:12, 04-12-2013 | #7


Ветеран


Сообщения: 2196
Благодарности: 727

Профиль | Отправить PM | Цитировать


hron66, не увидел уточнение ТЗ
Цитата hron66:
Имелось в ввиду, первый символ точка не в имени файла, а внутри файла. »
попробуйте
Код: Выделить весь код
@echo off
setlocal EnableDelayedExpansion

set filename=c:\1\new\dfg.txt
for /f "tokens=1* delims=[]" %%a in ('find /v /n "" ^<"%filename%"') do (
set line=%%a_%%b
if "!line:~0,3!"=="1_." echo %%b
)
pause>nul
exit
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:32, 04-12-2013 | #8


Ветеран


Сообщения: 27449
Благодарности: 8087

Профиль | Отправить PM | Цитировать


Цитата hron66:
Файлы обычные текстовые. Кодировка тоже стандартная - cp1251. »
Ясно. Пробуйте:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "usebackq delims=" %%i in (
	`dir /b /s /a:-d "E:\Песочница\0334\*.*"`
) do (
	<"%%~i" set /p sValue=
	if defined sValue if "!sValue:~0,1!" equ "." echo del /f /q "%%~i"
)

endlocal
exit /b 0
Для реального удаления уберите echo.

P.S. А что это за файлы?
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:24, 04-12-2013 | #9


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Iska, спасибо огромное !!! Ваше решение работает идеально и именно так, как нужно!
P.S. Это файлы по работе, которые приходят с АРМ и загружаются в БД. При этом, непонятно почему, бывают пустые файлы и файлы, содержащие много точек. Они обрабатываются с ошибками, поэтому хотелось сделать батник для удаления таких файлов. Можно бы было решить это все на Дельфи, но не хотелось еще больше грузить сервер задачами. А батник не ест память и работает очень быстро и незаметно.
P.P.S. Решение уже запущено в работу.
P.P.P.S. Еще раз спасибо всем за помощь!

Отправлено: 09:26, 05-12-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление файлов в папке и подпапках, содержащих определенную строку

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
удаление папок, содержащих определенные типы файлов jupiter1976 AutoIt 1 22-04-2013 23:39
CMD/BAT - [решено] Список файлов в папке и ее подпапках popt2t Скриптовые языки администрирования Windows 9 19-02-2013 00:14
CMD/BAT - Удаление всех файлов кроме одного в подпапках SELFY Скриптовые языки администрирования Windows 2 29-07-2012 15:34
CMD/BAT - Как прочитать с файла определенную строку Voshal Скриптовые языки администрирования Windows 1 27-05-2009 08:24




 
Переход