7 / 10 / 0
Регистрация: 23.05.2016
Сообщений: 77
1

Мгновенно перемещать создаваемые в одной папке файлы, в имени которых имеется слог "SB", в другую папку

23.05.2016, 17:21. Показов 1624. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, дорогие программисты! Нужно решить вот такую задачку. Необходимо, чтобы вновь созданные файлы в папке 1, в имени которых имеется слог "SB" (без кавычек) были мгновенно перенесены в папку 2. А если в папке 2 уже имеется файл с таким же именем, то вновь созданный не перезаписывал бы его, а переименовывался (то есть, чтобы в папке 2 сохранялись оба файла). Необходимо, чтобы появление файлов в папке 1 для дальнейшего переноса в папку 2 отслеживалось в режиме реального времени ну или раз в секунду. Буду очень вам благодарен за код батника.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.05.2016, 17:21
Ответы с готовыми решениями:

Перемещать файлы из одной папки в другую по 10 штук - BAT
Есть папка, в ней лежат файлы. Задача: переместить файлы из одной папки в другую папку по 10...

Копирование каждые 5 минут в общую папку по одной папке с номером в имени по порядку этих номеров
нужно написать bat файл, который будет каждые 5 минут копировать в папку main_folder полностью...

Скопировать из папки A в папку B файлы, которых нет в папке B
добрый день форумчане) помогите пожалуйста) надо составить програму которая дожлжна скопировать из...

Переименовать файлы которые лежат в папке, папки которых лежат в одной папке. (Приложил рисунок что бы было понятнее)
Есть папка (Смотрите рисунок), "1" (Коричневый квадрат), в ней лежат папки "2.1; 2.2; 2.3; 2.4;...

10
Любознательный
5594 / 1634 / 306
Регистрация: 10.03.2016
Сообщений: 3,704
23.05.2016, 20:32 2
Лучший ответ Сообщение было отмечено ComSpec как решение

Решение

Smart31,
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@echo off
rem Исходный каталог:
set "src=c:\1"
rem Целевой каталог:
set "dst=c:\2"
rem Пауза:
set to=5
:begin
cls
if not exist "%src%\*SB*.*" (echo not exist file with "SB"&&timeout /t %to% >nul&&goto begin)
if not exist "%dst%" md "%dst%"
for /f "delims=" %%i in ('dir /b /a-d "%src%"^|find "SB"') do if not exist "%dst%\%%i" (move "%src%\%%i" "%dst%" >nul ) else (set num=0&&call :anum "%%~i")
echo move file(s)&&timeout /t %to% >nul&&goto begin
pause&&exit
 
:anum
set /a "num+=1"
if exist "%dst%\%~n1%num%%~x1" goto :anum
move "%src%\%~1" "%dst%\%~n1%num%%~x1" >nul
exit /b
1
7 / 10 / 0
Регистрация: 23.05.2016
Сообщений: 77
24.05.2016, 09:24  [ТС] 3
Спасибо. Код на семерке работает отлично, о вот на xp переносит только один раз, потом пишет "timeout не является внутренней или внешней командой". Как решить пробрему на хр?
0
4333 / 2123 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
24.05.2016, 10:47 4
Windows Batch file
1
>nul ping -n 5 localhost &: 5 - кол-во секунд (-1)
.
0
7 / 10 / 0
Регистрация: 23.05.2016
Сообщений: 77
24.05.2016, 11:21  [ТС] 5
alpap, а можно выложить полный код для xp?
0
Любознательный
5594 / 1634 / 306
Регистрация: 10.03.2016
Сообщений: 3,704
24.05.2016, 14:53 6
Цитата Сообщение от Smart31 Посмотреть сообщение
потом пишет "timeout не является внутренней или внешней командой". Как решить пробрему на хр?
Тут всё просто, весь сценарий не нужен:
Выше предложенный alpap код, надо вставить в двух местах вместо:
Windows Batch file
1
timeout /t %to% >nul
только, чтобы паузу можно было изменять одним действием, код на замену должен быть таким:
Windows Batch file
1
>nul ping -n %to% localhost
Ну, или можно сделать, что-то более-менее универсальное...
Только надо подумать...

Добавлено через 12 минут
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@echo off
rem Исходный каталог:
set "src=c:\1"
rem Целевой каталог:
set "dst=c:\2"
rem Пауза:
set to=5
for /f "tokens=2 delims=[]" %%i in ('ver') do (
   for /f "tokens=2,3 delims=. " %%a in ("%%i") do set version=%%a.%%b
)
if "%version%"=="5.1" (set pze=^>nul ping -n %to% localhost) else (set pze=timeout /t %to% ^>nul)
:begin
cls
if not exist "%src%\*SB*.*" (echo not exist file with "SB"&&%pze%&&goto begin)
if not exist "%dst%" md "%dst%"
for /f "delims=" %%i in ('dir /b /a-d "%src%"^|find /i "SB"') do if not exist "%dst%\%%i" (move "%src%\%%i" "%dst%" >nul ) else (set num=0&&call :anum "%%~i")
echo move file(s)&&%pze%&&goto begin
pause&&exit
 
:anum
set /a "num+=1"
if exist "%dst%\%~n1%num%%~x1" goto :anum
move "%src%\%~1" "%dst%\%~n1%num%%~x1" >nul
exit /b
- так будет работать в WinXP и не XP (с поддержкой timeout). Для других ОС, не поддерживающих timeout, придется доработать проверку версии...
Хотя, в принципе, ping будет работать на любой вменяемой версии Windows. Без всяких доработок.
0
7 / 10 / 0
Регистрация: 23.05.2016
Сообщений: 77
25.05.2016, 09:17  [ТС] 7
YuS_2, спасибо большое. Теперь работает на всех ОС.
0
7 / 10 / 0
Регистрация: 23.05.2016
Сообщений: 77
10.06.2016, 16:21  [ТС] 8
Радость была недолгой. Батник работает как надо, но есть один нюанс. Если файл появляется в папке одновременно с его переносом (в данном случае на пятой секунде), то батник файл переносит, но он переносится пустой и весит 0 байт. Если увеличить время переноса файлов, то по теории вероятности ошибка будет встречаться редко, но встречается, что в моем случае неприемлемо. Остается один вариант, запускать батник вручную. Прошу программистов подредактировать код батника, чтобы по клику на батник, файлы мгновенно переносились и батник сразу закрывался.
0
Любознательный
5594 / 1634 / 306
Регистрация: 10.03.2016
Сообщений: 3,704
10.06.2016, 17:22 9
Цитата Сообщение от Smart31 Посмотреть сообщение
Если файл появляется в папке одновременно с его переносом (в данном случае на пятой секунде), то батник файл переносит, но он переносится пустой и весит 0 байт.
Цитата Сообщение от Smart31 Посмотреть сообщение
Остается один вариант, запускать батник вручную.
Эта проблема решаема. Необходимо только уточнить, сколько времени проходит от начала до конца записи файла в папку и тогда можно добавить соответствующую паузу между началом проверки существования этого файла и его переносом. Сейчас просто нет вообще никакой паузы между этими действиями.

Добавлено через 7 минут
Как-то так:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@echo off
rem Исходный каталог:
set "src=c:\1"
rem Целевой каталог:
set "dst=c:\2"
rem Пауза цикличности:
set to=5
rem Пауза между обнаружением и переносом файла
set mo=8
for /f "tokens=2 delims=[]" %%i in ('ver') do (
   for /f "tokens=2,3 delims=. " %%a in ("%%i") do set version=%%a.%%b
)
if "%version%"=="5.1" (set pze=^>nul ping -n %to% localhost) else (set pze=timeout /t %to% ^>nul)
:begin
cls
if not exist "%src%\*SB*.*" (echo not exist file with "SB"&&%pze%&&goto begin)
if not exist "%dst%" md "%dst%"
for /f "delims=" %%i in ('dir /b /a-d "%src%"^|find /i "SB"') do if not exist "%dst%\%%i" (>nul ping -n %mo% localhost&&move "%src%\%%i" "%dst%" >nul ) else (set num=0&&call :anum "%%~i")
echo move file(s)&&%pze%&&goto begin
pause&&exit
 
:anum
set /a "num+=1"
if exist "%dst%\%~n1%num%%~x1" goto :anum
>nul ping -n %mo% localhost
move "%src%\%~1" "%dst%\%~n1%num%%~x1" >nul
exit /b
1
7 / 10 / 0
Регистрация: 23.05.2016
Сообщений: 77
04.08.2016, 15:57  [ТС] 10
Выложите, пожалуйста, вариант кода, чтобы при запуске батник проверял папку 1 и папку 2 также на наличие файлов, содержащих слог слог "SB", и переносил эти файлы в папку 3, также сохранял оба файла с одинаковыми именами, но чтобы батник запускался вручную и делал эту процедуру сразу же после запуска и закрывался по окончании процедуры.
0
Любознательный
5594 / 1634 / 306
Регистрация: 10.03.2016
Сообщений: 3,704
05.08.2016, 18:29 11
Smart31,
по мотивам лички:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
@echo off
rem Целевой каталог:
set "dst=c:\12"
rem Пауза:
set to=5
rem Подготовка списка исходных каталогов c проверкой их существования
set "d1=c:\01"
set "d2=c:\02"
set "d3=c:\03"
set "d4=c:\04"
set "d5=c:\05"
rem шаблон фильтра
set "flt=*SB*.*"
rem количество используемых каталогов
set n=5
rem ---
set vn=0
for /l %%g in (1,1,%n%) do if defined d%%g call :dper %%g
goto continue
:dper
set vn=%1
call set "var=%%d%vn%%%"
if not exist "%var%" exit /b
set "dext=%dext% "%var%\%flt%""
exit /b
:continue
rem если не существует целевого каталога 
if not exist "%dst%\" md "%dst%"
rem переносим файлы с переименованием
for /f "delims=" %%i in ('dir /s /b /a-d %dext%^|find /i "SB"') do if not exist "%dst%\%%~nxi" (move "%%i" "%dst%\" >nul ) else (set num=0&&call :anum "%%~i")
pause&&exit
 
:anum
set /a "num+=1"
if exist "%dst%\%~n1%num%%~x1" goto :anum
move "%~1" "%dst%\%~n1%num%%~x1" >nul
exit /b
только в исходных каталогах будут просматриваться все подпапки. Если требуется переносить только файлы в каталоге без подпапок, то придется переделать сценарий на относительные пути...
1
05.08.2016, 18:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.08.2016, 18:29
Помогаю со студенческими работами здесь

Поиск файлов по названию в одной папке и копирование найденных файлов в другую папку
Дали задание на работе по поиску и копированию файлов pdf из одной папки в другую. Делаю на...

Скопировать все файлы, у которых возраст не больше 1 часа, в другую папку
Собственно обращаюсь к местным гуру, т.к. сам писать буду по всей видимости очень долго. Задача...

Выбрать случайную папку, скопировать из неё все файлы и перенести в другую папку
Добрый день! Прошу помощи в написании батника. Имеется папка A с неким количеством других папок....

Выбрать случайную папку, скопировать из неё все файлы и перенести в другую папку
Добрый день! Прошу помощи в написании скрипта. Имеется папка A с неким количеством других папок....

Перемещать смайлик с одной стороны экрана на другую (Borland Pascal)
Нужно написать программу, что бы веселое лицо(смайлик) двигалось с левой стороны экрана в правую, и...

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

Как найти файл в определенной папке и скопировать в другую папку?
Появилась необходимость искать нужный файл в папке и копировать его в другую папку. Есть вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru