Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/34: Рейтинг темы: голосов - 34, средняя оценка - 4.65
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10
1

Поиск и копирование файлов

06.04.2017, 12:23. Показов 6778. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Уважаемые знатоки! Прошу вашей помощи.На просторах интернета нашёл батник,который ищет на всех дисках и копирует найденные GIF файлы в определенную папку. Батник находит именно GIF файлы ,а в одноимённые файлы добавляет в имя (1),(2) и так далее. Но такое впечатление что он либо дважды производит поиск по всем дискам, то ли так же производит поиск в папке с уже найденными файлами.Поясню:есть одна картинка, например dddd.gif батник находит две картинки dddd.gif и dddd.gif(1)
Помогите устранить эту проблему.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Echo Off
Rem Путь задать БЕЗ слэша на конце
Set Output=C:\TEST
 
If Not Exist %Output% Exit /B 1
PushD %Output%&&RD . /S /Q 2>nul&PopD
For /F "Skip=1" %%A In ('WMIC LOGICALDISK WHERE "FileSystem!=NULL" GET Name') Do Call :_func "%%A"
GoTo :EoF
 
:_func
For /R "%~1" %%A in (*.gif) Do (
    If /i Not "%%~dpA"=="%Output%" If Exist "%Output%\%%~nxA" (
        For /F "Tokens=1* Delims=:" %%C in ('Dir /B /A-D "%Output%\%%~nA(*).gif" "%%A" 2^>nul^|FindStr /in .') Do If Not Exist "%Output%\%%~nA(%%C)%%~xA" Echo Copy "%%A" to "%Output%\%%~nA(%%C)%%~xA"&Copy /Y "%%A" "%Output%\%%~nA(%%C)%%~xA" >nul
    ) Else (
        Echo Copy "%%A" to "%Output%\%%~nxA"&Copy /Y "%%A" "%Output%\%%~nxA" >nul
    )
)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.04.2017, 12:23
Ответы с готовыми решениями:

Поиск и копирование файлов
Пересмотрел все что смог понять, но так ничего толком и не нашел. Нужно искать на диске С: например...

Поиск и копирование файлов по имени
Всем привет! Прошу совета в написании скрипта. В общем лежат в каталоге куча файлов, с именами...

Поиск, переименование и копирование файлов
Здравствуйте! Стоит такая задача, очень надеюсь на помощь.Необходимо на диске D:\ найти вcе файлы с...

Авто поиск и копирование файлов
rem если вам надо копировать другие файлы замените значение переменной nam rem по умолчанию поиск...

12
5985 / 1994 / 323
Регистрация: 10.12.2013
Сообщений: 6,875
06.04.2017, 12:58 2
не, давай сам;
вставь отладочную печать имени файла после 11-ой строки
Windows Batch file
1
echo %%A > file.txt
и посмотри, что происходит,
используя текстовый редактор и его функцию 'поиск' для файла file.txt
0
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10
06.04.2017, 17:47  [ТС] 3
Цитата Сообщение от android2222 Посмотреть сообщение
Но такое впечатление что он либо дважды производит поиск по всем дискам, то ли....
Дописал pause в конце кода,после этого увидел что батник ищет на всех дисках потом опять производит поиск на диске C.
Подскажите пожалуйста как это можно исправить.
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
06.04.2017, 18:50 4
Цитата Сообщение от android2222 Посмотреть сообщение
как это можно исправить
описать задачу здесь полностью и написать новый код по-человечески.
0
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10
06.04.2017, 19:27  [ТС] 5
Цитата Сообщение от alpap Посмотреть сообщение
описать задачу здесь полностью и написать новый код по-человечески.
Нужен батник который ищет файлы, например GIF, на всех дисках в том числе и на съёмных, на всех каталогах и подкаталогах, на всех папках и так далее. Одноимённые файлы тоже копировать,но добавлять в имя (1), (2), (3) и так далее. Найденые файлы должны быть чётко заданного формата, то-есть GIF, файлы другого формата например PNG но в названии которого присутствует слово gif должны быть проигнорированы.
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
07.04.2017, 15:00 6
Лучший ответ Сообщение было отмечено android2222 как решение

Решение

будут найдены только gif, везде
Windows Batch file
1
2
3
@echo off
for /l %%# in (65 1 90) do @cmd/c exit/b %%#& for /f "delims=" %%a in ('2^>nul cmd/v/c dir /a-d/b/s "!=ExitCodeAscii!:\*.gif"') do echo %%a
pause
Добавлено через 15 часов 33 минуты
с копированием:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
@echo off
set "d_out=papka_out"
if not exist "%d_out%" md "%d_out%"
for /l %%# in (65 1 90) do @cmd/c exit/b %%#& for /f "delims=" %%a in ('2^>nul cmd/v/c dir /a-d/b/s "!=ExitCodeAscii!:\*.gif"') do call :# "%%a"
pause
 
:#
 setlocal
  set /a n+=1
  if not exist "%d_out%\%~n1(%n%)%~x1" (copy "%~1" "%d_out%\%~n1(%n%)%~x1") else (goto #)
 endlocal
exit /b
Добавлено через 3 минуты
но красивше так (глаза рябит от скобочек и не очень понятно где первый. если в файле уже есть (1)):

Windows Batch file
1
2
3
4
5
6
7
...
 
:#
 setlocal  
  if not exist "%d_out%\%~n1%n%%~x1" (copy "%~1" "%d_out%\%~n1%n%%~x1") else (set /a n+=1& goto #)
 endlocal
exit /b
1
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10
08.04.2017, 14:36  [ТС] 7
Цитата Сообщение от alpap Посмотреть сообщение
будут найдены только gif, везде
alpap, Огромное спасибо,но есть проблемка.
Первый код прописывает к имени (1) на все найденые файлы ,а надо что бы только к одноимёным файлам
пример:
первый файл DDDD(1) , второой файл с таким именем DDDD(2) , третий файл с таким именем DDDD(3) и так далее.
надо:
первый DDDD , второой файл с таким именем DDDD(1) , третий файл с таким именем DDDD(2) и так далее.

Второй код прописывает к имени 1 но уже только к одноимёному файлу
пример:
первый файл DDDD , второой файл с таким именем DDDD1 , третий файл с таким именем DDD2 и так далее,но это хорошо если имя файла состоит из букв.
но если имя файла состоит из цифр например 12345 то получаем 123451 ,123452 и так далее.
в принципе второй код мне более нравится если вписать -
было: (set /a n+=1& goto #)
стало: (set /a n+=-1& goto #)
На выходе в одноимёных файлах получаем: DDDD-1 ,DDDD-2 , 12345-1 , 12345-2 и так далее.

Добавлено через 2 часа 47 минут
Цитата Сообщение от android2222 Посмотреть сообщение
но есть проблемка.
Обнаружил ещё проблему,не производит поиск в папках на диске D
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
08.04.2017, 17:23 8
Цитата Сообщение от android2222 Посмотреть сообщение
надо:
первый DDDD , второой файл с таким именем DDDD(1) , третий файл с таким именем DDDD(2) и так далее.
сложно так сделать простыми методами, поэтому и предложил второй вариант, без скобочек - не нравиться не ешьте

Цитата Сообщение от android2222 Посмотреть сообщение
не производит поиск в папках на диске D
не верю, надо подождать, этот диск возможно большого объема и перекур может быть не маленький, связались с cmd - терпите его недостатки.
0
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10
08.04.2017, 18:50  [ТС] 9
Цитата Сообщение от alpap Посмотреть сообщение
не нравиться не ешьте
Нравится ,но с небольшим изменением.

Цитата Сообщение от alpap Посмотреть сообщение
не верю, надо подождать, этот диск возможно большого объема и перекур может быть не маленький, связались с cmd - терпите его недостатки.
А стоит ли ждать если батник закончил работу ?
Прежде чем написать я много раз проверил это.Если файл лежит просто на диске D то батник его видит,если поместить в папку то батник не видит его. Диск С и E отрабатывает на все сто.
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
09.04.2017, 01:01 10
ну и я проверил этим:
Windows Batch file
1
2
3
4
5
6
7
@echo off
for /l %%# in (65 1 90) do @cmd/c exit/b %%#& for /f "delims=" %%a in ('2^>nul cmd/v/c dir /a-d/b/s "!=ExitCodeAscii!:\proba.txt"') do call :# "%%a"
pause
 
:#
 echo %~1>>"file.txt"
exit /b
Создал по папке на дисках C и D с файлом "proba.txt", вот вывод в "file.txt" после отработки кода:
C:\papka_C\proba.txt
D:\papka_D\proba.txt

так что то ли имена файлов какие-то экзотические, то ли запреты какие, но см. выше - все пучком (у меня).

Добавлено через 1 минуту
Цитата Сообщение от android2222 Посмотреть сообщение
если поместить в папку
а как называется папка, попробуйте исключить кириллицу или лучше сохраните код в кодировке 866.
0
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10
11.04.2017, 17:58  [ТС] 11
Цитата Сообщение от alpap Посмотреть сообщение
а как называется папка, попробуйте исключить кириллицу или лучше сохраните код в кодировке 866.
Странно, на компе стоит вин 7 и вин 10, на десятке батник работает на все 100 ,независимо в какой кодировке или от имени папки и так далее.
На семёрке ( у меня )работает криво.
Батник который выложил я ,видит все диски, папки ,каталоги как на семёрке ,так и на десятке ,но дважды ищет на диске C.
0
0 / 0 / 0
Регистрация: 29.12.2020
Сообщений: 1
29.12.2020, 05:37 12
Доброй ночи. Подскажите пожалуйста, что поменять в этом коде, что бы искало файлы не везде, а в конкретной (заданной) папке? Большое Спасибо
0
4334 / 2124 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
30.12.2020, 04:45 13
Цитата Сообщение от jurgluh Посмотреть сообщение
что поменять в этом коде
код
0
30.12.2020, 04:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.12.2020, 04:45
Помогаю со студенческими работами здесь

Поиск и копирование файлов по заданным условиям
Приветствую! Очень нужна Ваша помощь. Суть следующая, есть некая папка с множеством разных файлов....

Поиск и копирование файлов на FTP сервер
Здравствуйте, мне нужно написать батник который будет искать файлы *.jpg по всем дискам и загружать...

Поиск и копирование файлов с заменой дубликатов
Добрый день! По работе понадобилось сделать BAT-файл, который просматривает сетевую директорию...

Поиск и копирование только измененных файлов
Вот есть такой код: SET f=%~dp0 ::Сканирование ветки реестра КонсультантПлюс. В ней...


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

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