Войти

Показать полную графическую версию : Копирование файлов в 2 разные папки (bat)


Страниц : [1] 2

Kenwood
04-02-2014, 16:18
Здравствуйте,

Столкнулся с трудностью: дано, некая папка, например "out". В нее скидываются файлы. Задача скопировать файлы из папки "out" в две другие, но в первую: "1" - файлы должны быть скопированы. Во вторую папку "2" те же файлы должны быть перемещены. В итоге папка "out" должна быть пустая. Задача осложняется еще тем, что в папку "out" бывает попадают файлы без расширения. Как сделать так, чтобы все вышеописанное заработало?


P.S. Хотел реализовать все с помощью bat, но может Вы посоветуете прогу...







Буду очень благодарен за помощь. Спасибо заранее.

Iska
04-02-2014, 16:30
copy "c:\Source\*.*" "c:\Destination1\*.*"
copy "c:\Source\*.*" "c:\Destination2\*.*"
del /f /q "c:\Source\*.*"

Kenwood
04-02-2014, 16:42
Спасибо за ответ.
Я реализовал почти также, просто вместо второго "сору" я использовал команду - "move". Проблема в том, что файлы без расширения не перемещаются во вторую папку. Может это команда "move" не поддерживает такое перемещение?

Iska
04-02-2014, 17:08
вместо второго "сору" я использовал команду - "move". »
Вы не указали, где расположены источник и приёмник, а «move»: а) работает только в пределах одного раздела и б) не наследует права для перенесённых файлов, посему я не счёл возможным его использовать.

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

Kenwood
04-02-2014, 17:22
copy d:\out\*.* d:\archive\*.*
move d:\out\*.* d:\in\*.*

mwz
04-02-2014, 21:20
Kenwood, а где двойные кавычки (в "d:\out\*.*" и остальных)? Без них возможны проблемы при наличии файлов с пробелами в именах.

Kenwood
04-02-2014, 22:43
Каюсь, забыл )

А на что именно влияют кавычки. У меня и без них копирование происходило...

mwz
05-02-2014, 00:52
А на что именно влияют кавычки. »

Не помню как в данном случае (может быть при подстановочной группе *.* и пронесёт -- но именно пронесёт) -- но если не взять в кавычки имя с пробелами (берётся с путём к файлу, если он указан), то обработка имени завершится на этом пробеле, а следующая часть строки будет рассматриваться как самостоятельный параметр.

Создайте файл "test test.txt" в каком-либо каталоге, запустите командный процессор CMD и выполните три команды:copy "<путь_к_файлу>\test test.txt" "<тот_же_путь>\test1 test1.txt"(после чего в том же каталоге появится файл "test1 test1.txt" -- без кавычек, разумеется)
и
copy <путь_к_файлу>\test test.txt <тот_же_путь>\test2 test2.txt
и
copy "<путь_к_файлу>\test test.txt" <тот_же_путь>\test3 test3.txt-- и сравните результаты.

Iska
05-02-2014, 01:39
copy d:\out\*.* d:\archive\*.*
move d:\out\*.* d:\in\*.* »
move d:\out\*.* d:\in\

mwz, в данном конкретном случае нет необходимости — в пути пробельных символов нет (если, конечно, коллега Kenwood привёл реальные пути), а при подстановке в шаблоны это не влияет.

Но в целом всё обстоит именно так — лучше сразу привыкать обрамлять кавычками пути везде, независимо от «текущего случая».

Kenwood
05-02-2014, 09:19
Спасибо всем за помощь. Представленные мною пути реальные.

Я сменил содержимое батника на

copy "c:\Source\*.*" "c:\Destination1\*.*"
copy "c:\Source\*.*" "c:\Destination2\*.*"
del /f /q "c:\Source\*.*"

Теперь жду. Напомню, главное для меня, чтобы файлы без расширения тоже копировались в соотв папки

Limonica
05-02-2014, 10:04
Если они без расширения, зачем тогда ставишь? Правильный код:

copy d:\out\* d:\archive\*
move d:\out\* d:\in\*

Iska
05-02-2014, 10:47
Если они без расширения, зачем тогда ставишь? Правильный код: »
Limonica, не надо ничего изобретать. Это не 7-Zip.

Kenwood
05-02-2014, 11:04
Товарищи,

код
copy "c:\Source\*.*" "c:\Destination1\*.*"
copy "c:\Source\*.*" "c:\Destination2\*.*"
del /f /q "c:\Source\*.*"

не смог скопировать файл без расширения во вторую папку... (

Что можно еще попробовать?

Iska
05-02-2014, 11:26
Kenwood, что я:
До исполнения пакетного файла:
http://imageshack.com/a/img835/3784/t109.png

После исполнения пакетного файла:
http://imageshack.com/a/img534/7184/gh9x.png

Обратите внимание на файл «0003» — он без расширения.

делаю не так?

Код пакетного файла E:\Песочница\0358\0001.cmd:
@echo off
setlocal enableextensions enabledelayedexpansion

copy "E:\Песочница\0358\Source\*.*" "E:\Песочница\0358\Destination1\*.*"
copy "E:\Песочница\0358\Source\*.*" "E:\Песочница\0358\Destination2\*.*"
del /f /q "E:\Песочница\0358\Source\*.*"

endlocal
exit /b 0


Что можно еще попробовать? »
Можно показать скриншот с этим загадочным некопируемым файлом без расширения. Можно также привести результат команд «dir» и «dir /x» с этим файлом.

Kenwood
05-02-2014, 11:40
Я прогнал на стенде батник. Все отработало. Прикол в том, что файлы без расширения перебрасываются, но через раз. Эти файлы генерит сторонняя программа. Я предполагаю, что это как то связано с доступами на сам файл который создается.
Сейчас буду экспериментировать...

Всем спасибо большое за помощь

mwz
05-02-2014, 11:48
Прикол в том, что файлы без расширения перебрасываются, но через раз. Эти файлы генерит сторонняя программа <...> Сейчас буду экспериментировать... »

Я бы запустил эти три строки последовательно в окне CMD и посмотрел, в чём проблема (диагностическое сообщение типа "Не удалось скопировать файл" -- возможно что с причиной типа "Не доступа").

Кроме того, попробуйте в Свойствах батника (лучше -- ярлыка к нему, создав такой ярлык) поставить на закладке "Совместимость" галку "Выполнять от имени администратора".

Iska
05-02-2014, 11:53
Эти файлы генерит сторонняя программа. Я предполагаю, что это как то связано с доступами на сам файл который создается. »
А не открыт ли всё ещё этот файл на запись этой самой сторонней программой в тот момент, когда Вы пробуете исполнить код?

Kenwood
05-02-2014, 12:05
В точку. Это единственное объяснение проблемы. А это как я понимаю, не лечится... )

Iska
05-02-2014, 12:13
А это как я понимаю, не лечится... ) »
А каким образом это приложение создаёт файл? Что он собой представляет?

Kenwood
05-02-2014, 12:26
это файл с расширением ".in" Внутри набор символов для обработки другой программой. Мой бантик с интервалом сканит папку "out" и если там есть файл, перебрасывает его в другие две. Из папки "in" прога отсылает его по фтп на удаленную машину (файл локально удаляется после отсылки). А папка "archive" - это копия файла для меня.




© OSzone.net 2001-2012