PDA

Показать полную графическую версию : Удаление файлов по списку


Freddy1984
02-05-2017, 10:44
Здравствуйте! Прошу помощи.

For /f "tokens=*" %%i in (list.txt) do attrib -a %%i
attrib -a %0

Исходя из данного скрипта, список удаляемых слов/строк должен находится в файле "list.txt"

Вопрос: а как сделать так, что бы список слов/строк можно было прописать в самом скрипте, а не ссылаясь на отдельный файл со списком на удаление строк из "list.txt"?

Спасибо.

Busla
02-05-2017, 13:04
пропишите в начале скрипта закомментированный список файлов и ссылайтесь на сам скрипт

megaloman
02-05-2017, 16:51
@Echo Off
Cls

Set "File=%~dpnx0"

FOR /F "usebackq Skip=2 tokens=1 delims=[]" %%n IN (`Find /N "@@@@@" "%File%"`) DO Set /A NSkip=%%n
FOR /F "usebackq delims=" %%f IN (`more +%NSkip% "%File%"`) DO Echo "%%f"

pause
GoTo :Eof

@@@@@@@@@@@@@@@@@@@@
Z:\Box_In\exampl_report.xls
Z:\Box_In\textfile.txt
Z:\Box_In\Вывод_в_одну_строку.bat
Z:\Box_In\Вывод_в_одну_строку.bat.txt
Z:\Box_In\*.xlsx
Z:\Box_In\Книга1.xls
Z:\Box_In\Книга12345678.xls
Z:\Box_In\Рекурсия_список_файлов_в_поддиректориях.vbs
Z:\Box_In\Собрать данные из нескольких текстовых файлов.xls

Список файлов сразу после @@@@@@@@@@@@@@@@@@@@
Вместо Echo напишите нужное Вам действие. Я не стал этого делать, так как в заголовке удалить, а в примере - изменить атрибут
При развитии скрипта, если у Вас возникнет необходимость, список файлов должен быть после всего кода.

y--
03-05-2017, 09:14
megaloman, Цитата megaloman:
При развитии скрипта, если у Вас возникнет необходимость, список файлов должен быть после всего кода. »
это не обязательно - развивать можно например так:@ECHO OFF
SET "BEGIN_MARKER=:ENDFILE1"
SET "END_MARKER=:ENDFILE2"
FOR /F "usebackq tokens=1 delims=:" %%a IN (`FINDSTR /N /B /C:"%BEGIN_MARKER%" "%~0"`) DO SET "SKIP_LINE=%%a"
CALL :WORK "%SKIP_LINE%" "%END_MARKER%" "%~0"
GOTO :EOF

:WORK
FOR /F "usebackq skip=%~1 tokens=1 eol=; delims=" %%a IN (`TYPE "%~3"`) DO IF NOT "%%a"=="%~2" (ECHO %%a) ELSE (GOTO :EOF)
GOTO :EOF

:ENDFILE1
;1
2
3
4
5

:ENDFILE2
6
7
8При этом считывание строк производится от метки до метки - ну или до конца файла - при отсутствии маркера конца чтения...

Iska
03-05-2017, 16:37
Вообще, крайне желательно не использовать подобный подход. Должно быть: мухи отдельно, котлеты отдельно код отдельно, данные отдельно.

megaloman
03-05-2017, 17:31
Iska, Надо, чтобы вы руководили принципами, а не принципы вами.Главное - логика ситуации. Иметь 2 файла это часто неудобно. Кстати, MS SQL Server, в базе - и данные, и процедуры для их обработки.

Iska
03-05-2017, 18:02
megaloman, тут Вы путаете. И там — таблицы отдельно, запросы отдельно. Когда Вам понадобятся разные наборы данных — порочность подхода сразу становится видна.

y--
03-05-2017, 19:31
Iska,
Когда Вам понадобятся разные наборы данных — порочность подхода сразу становится видна. »
в приведенном мною примере уже сразу заложена возможность использовать произвольное количество наборов (однородных в пределах набора) данных...

И там — таблицы отдельно, запросы отдельно. »
запросы??? Сторки, функции, типы пользовательких данных, вьюхи - и это все прям отдельно? Да у вас, батенька, винегрет не перемешан ;)

Iska
03-05-2017, 20:09
в приведенном мною примере уже сразу заложена возможность использовать произвольное количество наборов (однородных в пределах набора) данных... »
Повторяю: идея порочна по сути. Вы предлагаете жить с заранее и строго предопределёнными наборами данных.

запросы??? Сторки, функции, типы пользовательких данных, вьюхи - и это все прям отдельно? Да у вас, батенька, винегрет не перемешан »
Смешались в кучу кони, люди. y--, не натягивайте сову на глобус.

Busla
03-05-2017, 23:48
код отдельно, данные отдельно. »
скрипты обычно и делают для частных задач, реализовывать общее решение часто и избыточно и нерационально
в общем-то от этого (преждевременной оптимизации и заделов на будещее масштабирование) часто предостерегают и при обычной разработке ПО

ну а конкретно такой подход чуть ли не Best Practice - exe файлы в основном для этого и придумали, чтобы впихать туда помимо кода ещё и ресурсы. Тут всё красивенько - не захардкодено, а отдельным списком

alpap
04-05-2017, 02:38
а как вам такой винегрет?
в переменной %teg% вид тега, разделяющего блоки, в переменной %sn% - номер нужного блока, если номер не указать (оставить эту переменную пустой), будет выведен последний блок, спецсимволов не боится.

@echo off
set "teg=---"& set "sn=3"
setlocal enabledelayedexpansion
<"%~f0" (for /f "skip=1 delims=[]" %%a in ('find /n /v ""^|findstr/lc:"%teg%"') do @set/a n+=1, n_=n-1, sn_=sn+1& set "N!n!=%%a")
if "%sn%"=="" (set/a nd=N%n_%+1, kd=N%n%-1) else (set/a nd=N%sn%+1, kd=N%sn_%-1)
setlocal disabledelayedexpansion
<"%~f0" (for /f "delims=" %%a in ('"for /l %%a in (%nd%,1,%kd%) do @find /n /v ""|find "[%%a]""') do @set "s=%%a"& cmd/v/c echo[!s:*]^^=!)
pause& exit

:: Список блоков
------------------
C:\papka\file1.txt
C:\papka\file2.txt
C:\papka\file3.txt
------------------
C:\papka\file1.cmd
C:\papka\file2.cmd
C:\papka\file3.cmd
------------------
C:\papka\file1.bat
C:\papka\file2.bat
C:\papka\file3.bat
------------------
C:\papka\file1.exe
C:\papka\file2.exe
C:\papka\file3.exe
------------------

y--
04-05-2017, 08:36
alpap,
а как вам такой винегрет? »
Готично!
Единственное замечание - блоки не перестановочные. Ну символ комментария в блоке желательно предусмотреть ;)
(В приведенном мной примере это ";")




© OSzone.net 2001-2012