Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Копирование файлов в 2 разные папки (bat) (http://forum.oszone.net/showthread.php?t=277094)

Kenwood 04-02-2014 16:18 2302581

Копирование файлов в 2 разные папки (bat)
 
Здравствуйте,

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


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







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

Iska 04-02-2014 16:30 2302590

Код:

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


Kenwood 04-02-2014 16:42 2302604

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

Iska 04-02-2014 17:08 2302624

Цитата:

Цитата Kenwood
вместо второго "сору" я использовал команду - "move". »

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

Цитата:

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

Покажите Ваш код.

Kenwood 04-02-2014 17:22 2302632

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

mwz 04-02-2014 21:20 2302769

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

Kenwood 04-02-2014 22:43 2302819

Каюсь, забыл )

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

mwz 05-02-2014 00:52 2302894

Цитата:

Цитата Kenwood
А на что именно влияют кавычки. »

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

Создайте файл "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 2302908

Цитата:

Цитата Kenwood
Код:

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

»

Код:

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

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

Kenwood 05-02-2014 09:19 2302991

Спасибо всем за помощь. Представленные мною пути реальные.

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

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

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

Limonica 05-02-2014 10:04 2303000

Если они без расширения, зачем тогда ставишь? Правильный код:
Код:

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


Iska 05-02-2014 10:47 2303025

Цитата:

Цитата Limonica
Если они без расширения, зачем тогда ставишь? Правильный код: »

Limonica, не надо ничего изобретать. Это не 7-Zip.

Kenwood 05-02-2014 11:04 2303038

Товарищи,

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

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

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

Iska 05-02-2014 11:26 2303052

Kenwood, что я:
читать дальше »
До исполнения пакетного файла:


После исполнения пакетного файла:


Обратите внимание на файл «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

Цитата:

Цитата Kenwood
Что можно еще попробовать? »

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

Kenwood 05-02-2014 11:40 2303063

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

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

mwz 05-02-2014 11:48 2303077

Цитата:

Цитата Kenwood
Прикол в том, что файлы без расширения перебрасываются, но через раз. Эти файлы генерит сторонняя программа <...> Сейчас буду экспериментировать... »

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

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

Iska 05-02-2014 11:53 2303079

Цитата:

Цитата Kenwood
Эти файлы генерит сторонняя программа. Я предполагаю, что это как то связано с доступами на сам файл который создается. »

А не открыт ли всё ещё этот файл на запись этой самой сторонней программой в тот момент, когда Вы пробуете исполнить код?

Kenwood 05-02-2014 12:05 2303094

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

Iska 05-02-2014 12:13 2303105

Цитата:

Цитата Kenwood
А это как я понимаю, не лечится... ) »

А каким образом это приложение создаёт файл? Что он собой представляет?

Kenwood 05-02-2014 12:26 2303117

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

Kenwood 06-02-2014 16:41 2304110

Вопрос решился так:

в коде

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

изменил "\*.*" на "\*.in"

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




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


Время: 20:31.

Время: 20:31.
© OSzone.net 2001-