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

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

Ответить
Настройки темы
CMD/BAT - [решено] Копирование и удаление файлов по маске
ul9 ul9 вне форума

Пользователь


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

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


Здравствуйте.
Помогите пожалуйста решить проблему.
Есть папка с подпапками (около 30 штук). В каждой подпапке находятся текстовые файлы (всегда 900 txt).
Файлы имеют такой вид
Код: Выделить весь код
result0000000.txt
result0000001.txt
result0000002.txt
...
и так до
result0000898.txt
result0000899.txt
Нужно удалить конкретные файлы. Я нашла вот такой скрипт
Код: Выделить весь код
setlocal enableextensions
set "MYPATH=E:\TEMPO_UPD\32-bit\En\UnPack\KBxxxxxx\"
set SOURSE=*.exe
for /f "tokens=*" %%i in ('dir /b/s/a-d "%MYPATH%%SOURSE%" ^| findstr /G:KB.log') do del /q /f "%%i"
endlocal
EXIT
Удалять нужно с result0000299.txt по result0000899.txt.
Конечно можно прописать список из 600 файлов, но неужели нет более элегантного решения?

А в другой подпапке нужно перенести из одной папки в другую файлы с result0000599.txt по result0000899.txt.
Тут я уже не смогла найти нужный скрипт...

Хоть я и выбрала категорию cmd/bat, способ решения мне не важен

С уважением,
Юлия

Отправлено: 16:38, 17-10-2012

 

Ветеран


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

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


Цитата ul9:
Удалять нужно с result0000299.txt по result0000899.txt. »
Выполните непосредственно в командной строке (не в пакетном файле):
Код: Выделить весь код
for /l %i in (299,1,899) do @del /s /q "E:\Песочница\0184\result0000%i.txt" 2>nul
где вместо E:\Песочница\0184 укажите путь к Вашей папке («Есть папка с …»).

Цитата ul9:
А в другой подпапке нужно перенести из одной папки в другую файлы с result0000599.txt по result0000899.txt. »
Это какая другая подпапка?
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:13, 17-10-2012 | #2



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

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

ul9 ul9 вне форума Автор темы

Пользователь


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

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


Я через AutoScriptWriter записала себе порядок действий по генерации файлов.
Приведу пример.
Есть основная папка work, а в ней подпапки test1, test2, test3, test4 и т.д.. В каждой из этих подпапок по 900 txt файлов.
В папке test1 нужно оставить первые 300 файлов (result0000000.txt - result0000299.txt), все остальные удалить.
Из папки test2 перенести (result0000300.txt - result0000599.txt) в папку test3, а (result0000599.txt - result0000899.txt) в test4.
Надеюсь не косноязычно получилось


Цитата Iska:
Выполните непосредственно в командной строке (не в пакетном файле):
Код: Выделить весь код
for /l %i in (299,1,899) do @del /s /q "E:\Песочница\0184\result0000%i.txt" 2>nul
Плохо, что нельзя добавить в свой скрипт, т.к. процедура довольно регулярная.

Последний раз редактировалось ul9, 17-10-2012 в 19:25.


Отправлено: 18:37, 17-10-2012 | #3


Ветеран


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

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


Цитата ul9:
а в ней подпапки test1, test2, test3, test4 и т.д. … »
1. И сколько будет «и т.д.»?
2. Как поступать с файлами из test5, test6 … testNN?
3. Сами папки вида testXX не имеют вложенных? То есть, не надо искать файлы result0000XX.txt ещё и во вложенных в test1, test2 …?

Цитата ul9:
Из папки test2 перенести (result0000300.txt - result0000599.txt) в папку test3 »
1. Папки test3 и test4 уже существуют или их надо создавать?
2. Если — «Существуют», то что делать, если в test3 и/или в test4 окажутся одноимённые файлы?

Цитата ul9:
Плохо, что нельзя добавить в свой скрипт, т.к. процедура довольно регулярная. »
Можно. Только не именно этот код. Этот — удалит Вам все подходящие файлы из всех testXX, вложенных в указанную, а не только из test1.

Отправлено: 20:02, 17-10-2012 | #4

ul9 ul9 вне форума Автор темы

Пользователь


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

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


Как я себе представляю логику скрипта. Вначале я распределяю файлы по папкам, после переименовываю их в result0000000.txt - result0000299.txt, а все остальные удаляю из всех папок.
Цитата Iska:
1. И сколько будет «и т.д.»? »
Порядка 30 папок
Цитата Iska:
2. Как поступать с файлами из test5, test6 … testNN? »
Я готова прописать действия вручную для каждой папки.
Цитата Iska:
3. Сами папки вида testXX не имеют вложенных? То есть, не надо искать файлы result0000XX.txt ещё и во вложенных в test1, test2 …? »
Вложенных папок нет, но названия у них не test, это я для примера написала. Папки имеют названия в транслите с нижним подчёркиванием без прочих знаков пунктуации, вот пример (rezim_raboti).
Цитата Iska:
1. Папки test3 и test4 уже существуют или их надо создавать? »
Все необходимые папки существуют.
Цитата Iska:
2. Если — «Существуют», то что делать, если в test3 и/или в test4 окажутся одноимённые файлы? »
test3 и test4 изначально пустые, они создаются специально
Код: Выделить весь код
MD D:\work\notarius_pomosh

Отправлено: 20:19, 17-10-2012 | #5

ul9 ul9 вне форума Автор темы

Пользователь


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

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


...что-то тема затихла...
А как можно запустить этот код из батника?
Код: Выделить весь код
for /l %i in (299,1,899) do @del /s /q "E:\Песочница\0184\result0000%i.txt" 2>nul

Отправлено: 19:20, 18-10-2012 | #6


Ветеран


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

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


Цитата ul9:
...что-то тема затихла... »
Не затихла. Но для меня, например, какие-то моменты требуют осмысления. Даже для того, чтобы задать очередные уточняющие вопросы.

Цитата ul9:
А как можно запустить этот код из батника? »
Удвоив «%» при переменных цикла разбора и выкинув ненужные подавления вывода:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /l %%i in (299,1,899) do del /s /q "E:\Песочница\0184\result0000%%i.txt" 2>nul

endlocal
exit /b 0
Но запускать его пока не рекомендую: удалите указанные файлы во всех вложенных папках.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:35, 18-10-2012 | #7

ul9 ul9 вне форума Автор темы

Пользователь


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

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


Цитата Iska:
Не затихла. Но для меня, например, какие-то моменты требуют осмысления. Даже для того, чтобы задать очередные уточняющие вопросы. »
У меня, к сожалению, ограничено время... Задавайте все вопросы, не стесняйтесь
Цитата Iska:
Но запускать его пока не рекомендую: удалите указанные файлы во всех вложенных папках. »
К сожалению альтернативы нет. Придётся сначала перемещать файлы этим скриптом, нашла его на этом форуме.
Код: Выделить весь код
@Echo Off
cls
FOR /F "usebackq delims=" %%f IN ("D:\Delete\filelist.txt") DO Call :MoveFile "%%~f"
GoTo :Eof

:MoveFile

Set Out="%~dp1"
Set Out=%Out:"c:\src\="d:\dsc\%
Set Out=%Out:\"="%

Md %Out% >nul 1>nul 2>nul

Move %1 %Out%
Буду для каждой папки задавать что куда.
Потом так переименую для каждой папки
Код: Выделить весь код
@echo off

setlocal enableextensions enabledelayedexpansion
set /a lCount = 0
for /f "delims=*" %%i in ('dir /b /s "D:\work\nasledstvo\*.txt"') do (
	set /a lCount += 1
	ren "%%i" "file!lCount!%%~xi"
)
endlocal

exit /b 0
А потом буду прогонять вашим кодом
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion
for /l %%i in (299,1,899) do del /s /q "E:\Песочница\0184\result0000%%i.txt" 2>nul
endlocal
exit /b 0

Отправлено: 19:52, 18-10-2012 | #8


Ветеран


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

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


D:\work\nasledstvo\*.txt
ren "%%i" "file!lCount!%%~xi"
выполнять не рекомендую, замучаетесь потом маску выставлять.
file1.txt
file10.txt
file100.txt

Сделайте себе несколько батников
1. Удаление 600 файлов.
2. Перенос из папки в папку 300 файлов. (замените в скрипте из второго поста @del на move и соответствующие цифры.

удаление 600 файлов из папки test1
del600.cmd d:\test1

удаление 600 файлов из папки test22
del600.cmd d:\test22
тело
Код: Выделить весь код
for /l %%i in (299,1,899) do del  /q "%1%%i.txt" 2>nul
%1, %2 .... %9 означают параметры переданные команднику.

перемещение из d:\test1 в d:\test2

move599.cmd d:\test1 d:\test2

Код: Выделить весь код
for /l %%i in (299,1,599) do move  "%1%%i.txt" "%2"
со вторым списком аналогично.

крайне рекомендую все папки по которым будет проводиться очистка заархивировать и спрятать на другой диск.
при проверке батников можно перед командами del, Move поставить echo. Будет длинный список команд .

Настоятельно рекомендую прочитать справку по командам for, if, set
Обязательно читать справку по del, Move и любым командам которые удаляют/копируют/перемещают папки или файлы.
cmd /k help for
help if
help set
help

В путях пускай не будет пробелов, %, !, ~ и других спец символов, аккуратней с русскими буквами
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:15, 18-10-2012 | #9


Ветеран


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

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


Цитата ul9:
Задавайте все вопросы, не стесняйтесь »
ul9, после Ваших последних постов я совершенно перестал понимать Ваши потребности.

Максимум того, что могу предложить — это дать примерное представление.

читать дальше »
1.
Цитата ul9:
Есть основная папка work, а в ней подпапки test1, test2, test3, test4 и т.д.. В каждой из этих подпапок по 900 txt файлов.
В папке test1 нужно оставить первые 300 файлов (result0000000.txt - result0000299.txt), все остальные удалить. »
Код: Выделить весь код
for /l %%i in (299,1,899) do del /q "c:\Work\test1\result0000%%i.txt" 2>nul
2.
Цитата ul9:
Из папки test2 перенести (result0000300.txt - result0000599.txt) в папку test3 »
При условии, что «test2» и «test3» находятся на одном разделе, и «test3» существует:
Код: Выделить весь код
for /l %%i in (300,1,599) do move /y "c:\Work\test2\result0000%%i.txt" "c:\Work\test3\" 2>nul
3.
Цитата ul9:
а (result0000599.txt - result0000899.txt) в test4. »
При условии, что «test2» и «test4» находятся на одном разделе, и «test4» существует:
Код: Выделить весь код
for /l %%i in (599,1,899) do move /y "c:\Work\test2\result0000%%i.txt" "c:\Work\test4\" 2>nul
Если данный код будет исполняться после 2) — файла «result0000599.txt» в исходной папке уже не будет: он будет перемещён кодом 2) в «test3».
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:54, 19-10-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - Нужен VBS скрипт для поиска файлов по маске и копирование его в определенное место exekill Скриптовые языки администрирования Windows 0 17-03-2012 10:46
CMD/BAT - [решено] Копирование файлов по маске за вчерашний день dvassilyev Скриптовые языки администрирования Windows 8 19-10-2011 19:36
CMD/BAT - копирование файлов удовлетворяющих маске из одного каталога в два других Gablik Скриптовые языки администрирования Windows 5 15-09-2011 15:13
Delphi - Перемещение и удаление файлов по маске. Putin-mode Программирование и базы данных 1 21-06-2010 12:16
Можно ли запретить копирование файлов на сервер по маске admyes Microsoft Windows NT/2000/2003 1 08-12-2005 06:44




 
Переход