Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление файлов в папке и подпапках, содержащих определенную строку (http://forum.oszone.net/showthread.php?t=273380)

hron66 04-12-2013 10:07 2266677

Удаление файлов в папке и подпапках, содержащих определенную строку
 
Добрый день. Уважаемые форумчане, есть проблема. Задача стоит следующим образом: необходимо в конкретной папке и всех подпапках найти и удалить:
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 04-12-2013 11:40 2266714

Цитата:

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

2) Файлы, в которых первый символ - .(точка). »

Код:

del /q /s ".*"
Не?!

hron66 04-12-2013 11:43 2266715

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

Iska 04-12-2013 15:41 2266866

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

hron66 04-12-2013 15:55 2266874

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

sov44 04-12-2013 17:03 2266923

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 04-12-2013 17:12 2266930

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

sov44 04-12-2013 17:32 2266949

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


Iska 04-12-2013 18:24 2266982

Цитата:

Цитата 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. А что это за файлы?

hron66 05-12-2013 09:26 2267283

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

Iska 05-12-2013 16:42 2267493

hron66, спасибо, ясно.

Dahommie18 20-04-2023 11:07 3007792

Здравствуйте!
Необходимо произвести поиск всех типов документов на дисках С и D и удалить те, которые содержат внутри «для служебного пользования»
Заранее большое спасибо!

DJ Mogarych 20-04-2023 14:20 3007802

"Всех типов документов" - это круто, конечно.
Каких именно типов?


Время: 03:40.

Время: 03:40.
© OSzone.net 2001-