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

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

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

Новый участник


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

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


Изменения
Автор: cutter47
Дата: 24-06-2020
Описание: Решено
Приветствую всех, подскажите пожалуйста по такому вопросу - имеется файл -
list.txt в котором указаны названия файлов с их путями, пример:

list.txt
c:\117888\asd.txt
c:\987898\zxdfg.txt
c:\354687\asd.txt
c:\567765\rty.txt
c:\785565\asd.txt


как мне все эти файлы скопировать в нужную папку например: d:\backup\
при условии что если копируемый файл уже имеется в папке назначения, то он не перезаписывался, а копировался с новым именем, например добавляя суффикс номера файла, например asd.txt asd(1).txt asd(2).txt из примера list.txt выше.
Прошу помощи в этом, буду вам очень благодарен.

Отправлено: 09:40, 18-06-2020

 

Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off 
	Set "TxtFile=Z:\Box_In\list.txt"
	Set "BoxOut=D:\Backup"
	Set /A MaxLen=3

	2>nul Md "%BoxOut%" 
	FOR /F "usebackq delims=" %%f IN ("%TxtFile%") DO Call :AddFile "%BoxOut%" "%%f" %MaxLen%
Exit /B

:AddFile
	If Not Exist %2 Exit /B 1
	If Not Exist "%~1\%~nx2" >nul Copy %2 "%~1\"
	Set /A N=10000000
	:Begin
		Set /A N+=1
		Call Set "OutName=%~1\%~n2(%%N:~-%3%%)%~x2"
		If Exist "%OutName%" GoTo :Begin
	>nul Copy %2 "%OutName%"
Exit /B

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 18-06-2020 в 12:53.

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:26, 18-06-2020 | #2



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

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


Ветеран


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

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


Код: Выделить весь код
@echo off
set "d_out=d:\backup"
set "f=C:\list.txt"

<"%f%" (for /f "delims=" %%a in ('more') do call :#cp "%d_out%" "%%a")
exit

:#cp
 setlocal
  pushd "%~1"
   if not exist "%~n2%n%%~x2" (>nul copy "%~2" "%~n2%n%%~x2") else (set /a n+=1& goto #cp)
  popd
 endlocal
exit /b
если надо именно такой формат: asd(2).txt
Код: Выделить весь код
@echo off
set "d_out=d:\backup"
set "f=C:\list.txt"

<"%f%" (for /f "delims=" %%a in ('more') do call :#cp "%d_out%" "%%a")
exit

:#cp
 setlocal
  pushd "%~1"
   set /a n+=1
   if not exist "%~n2(%n%)%~x2" (>nul copy "%~2" "%~n2(%n%)%~x2") else goto #cp
  popd
 endlocal
exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:33, 18-06-2020 | #3


Новый участник


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

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


Всем большое спасибо !
Но периодически батник во всех предложенных вариантах выдает такое https://prnt.sc/t2ba1x

Последний раз редактировалось cutter47, 18-06-2020 в 23:50.


Отправлено: 22:26, 18-06-2020 | #4


Аватара для Fors1k

Старожил


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

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


powershell
Код: Выделить весь код
param(
    $path   = "C:\list.txt",
    $backup = "d:\backup\"
)cls

gc $path|%{$q=gi -lite $_;
$i=0; $new=$backup+$q.Name
while(Test-Path $new){$i++
    $new = $backup+$q.Name
    $new = $new.replace($q.basename, $q.basename+"($i)")
}copy-item  -lite $_ $new}
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:59, 19-06-2020 | #5


Ветеран


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

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


Цитата cutter47:
батник во всех предложенных вариантах выдает такое »
это для моего кода будет, если строк много, таков уж bat, увы.
а код megaloman запускали? Или переходите на PS как выше предложил Fors1k, там точно нет таких проблем.
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:02, 19-06-2020 | #6


Ветеран


Contributor


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

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


cutter47, а какое количество одинаковых по имени файлов возможно? У меня сейчас было MaxLen=3, то есть максимум 999+1 файл
(формат имени "имя(ххх).расширение"). (ххх) - такой формат нужен для удобной сортировке файлов по имени в проводнике или файл-менеджере. Можно этот параметр увеличить, при необходимости. Я протестировал батник с List.txt с >1600 строк - отработал без замечаний, хотя и долго.
А какие реально имена файлов? Если в них нет пробелов, то реально существенно ускорить его работу.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 19-06-2020 в 18:29.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:42, 19-06-2020 | #7


Новый участник


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

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


Вложения
Тип файла: txt Новый текстовый документ (3).txt
(3.0 Kb, 3 просмотров)

Здравствуйте всем, спасибо большое за помощь, длина пути может содержать более 300 символов, в пути встречаются папки с китайскими иероглифами.
List.txt будет содержать чуть менее 3 миллионов строк (в принципе можно разбить на части).
Повторов копируемых файлов может быть до 100 тысяч (все разные, поэтому перезапись не приемлема)
С такими путями через проводник не работаю, работаю через тотал коммандер.
Пример строк из файла List.txt прикрепляю.

http://forum.oszone.net/attachment.p...1&d=1592739394

Последний раз редактировалось cutter47, 21-06-2020 в 14:44. Причина: исправил


Отправлено: 14:38, 21-06-2020 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Проверка существования файлов в папке и копирование файлов в другую Funbeee Скриптовые языки администрирования Windows 2 07-09-2016 12:51
Любой язык - Копирование файлов. Jeerjmin Скриптовые языки администрирования Windows 6 08-07-2016 20:08
Любой язык - Копирование файлов Sisin Скриптовые языки администрирования Windows 4 23-03-2015 16:58
Любой язык - Копирование файлов lukas_endigo_91@vk Скриптовые языки администрирования Windows 0 06-01-2015 14:27
CMD/BAT - Копирование файлов corwax Скриптовые языки администрирования Windows 7 03-03-2014 10:06




 
Переход