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

Аватара пользователя
hron66

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

Сообщение hron66 »

Добрый день. Уважаемые форумчане, есть проблема. Задача стоит следующим образом: необходимо в конкретной папке и всех подпапках найти и удалить:

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

Этот код ищет первый символ в файле. Вот этот код я и пытался приладить к основному файлу с циклами.

Помогите, чем сможете..
Аватара пользователя
Iska

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

Сообщение Iska »

Цитата hron66:



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



2) Файлы, в которых первый символ - .(точка).
CMD/BAT - [решено] Удаление файлов в папке и подпапках, содержащих определенную строку






Код:

Код: Выделить всё

del /q /s ".*"

Не?!
Аватара пользователя
hron66

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

Сообщение hron66 »

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

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

Сообщение sov44 »

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
Аватара пользователя
hron66

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

Сообщение hron66 »

hron66, не увидел уточнение ТЗ


Цитата hron66:



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




попробуйте

Код: Выделить всё

@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
Аватара пользователя
sov44

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

Сообщение sov44 »

Цитата hron66:



Файлы обычные текстовые. Кодировка тоже стандартная - cp1251.
CMD/BAT - [решено] Удаление файлов в папке и подпапках, содержащих определенную строку




Ясно. Пробуйте:



Код:

Код: Выделить всё

@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. А что это за файлы?
Аватара пользователя
Iska

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

Сообщение Iska »

Iska, спасибо огромное !!! Ваше решение работает идеально и именно так, как нужно!

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

P.P.S. Решение уже запущено в работу.

P.P.P.S. Еще раз спасибо всем за помощь!
Ответить

Вернуться в «Скриптовые языки администрирования Windows»