![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Функция сравнения и копирования |
|
|
CMD/BAT - Функция сравнения и копирования
|
Новый участник Сообщения: 11 |
Доброго времени суток!
Такая задача: в папке (допустим folder) имеется файлы (например с расширением .bat & .txt) с одинаковыми именами, необходимо файлы с одинаковыми именами (т.е. 1.txt и 1.bat) перенести в другую папку (допустим folder_to), а те файлы которые, у которых не найдётся "родственной души" остались не тронутыми. Что было предпринято: пытался задать две переменные, а вот как их сравнить - я не имею не единого понятия. Может конвеер надо организовать? ********************************************* @echo off cd C:\Users\Z\Desktop\test\test1\ set var= set /p var="Vvod: " for %%i in (%var%.txt) do (echo %%i) for %%e in (%var%.bat) do (echo %%e) :set1 set /p var1="Comand: " %var1% goto :set1 pause ********************************************* |
|
Отправлено: 12:04, 27-12-2016 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Попробуйте так (не проверялось):
Скрытый текст
@echo off setlocal enableextensions enabledelayedexpansion set sSourceFolder=c:\Folder set sDestFolder=c:\folder_to if exist "%sSourceFolder%\." ( if exist "%sDestFolder%\." ( for /f "usebackq delims=" %%i in ( `2^>nul dir /b /a:-d "%sSourceFolder%\*.bat"` ) do if exist "%sSourceFolder%\%~ni.txt" ( echo move "%sSourceFolder%\%~i" "%sDestFolder%\" echo move "%sSourceFolder%\%~ni.txt" "%sDestFolder%\" ) ) else ( echo Can't find destination folder [%sDestFolder%]. exit /b 2 ) ) else ( echo Can't find source folder [%sSourceFolder%]. exit /b 1 ) endlocal exit /b 0 Для реального применения уберите echo. |
Отправлено: 13:39, 27-12-2016 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Попробуйте, проверялось :)
@Echo Off Set "InBox=Z:\Box_In" Set "OutBox=Z:\Box_Out" FOR /F "usebackq delims=" %%f IN (`Dir "%InBox%\*.*" /B /A:-D /O:N 2^>nul`) DO ( If Exist "%InBox%\%%f" ( FOR /F "usebackq skip=1 delims=" %%i IN (`Dir "%InBox%\%%~nf.*" /B /A:-D /O:N 2^>nul`) DO ( If Exist "%InBox%\%%i" Move /Y "%InBox%\%%~nf.*" "%OutBox%\" >nul ) ) ) |
------- Последний раз редактировалось megaloman, 27-12-2016 в 16:02. Отправлено: 15:50, 27-12-2016 | #3 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 17:42, 27-12-2016 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать «Все работы хороши, выбирай на вкус»™
![]() Цитата megaloman:
|
||
Последний раз редактировалось Iska, 27-12-2016 в 18:33. Причина: Вопрос снят, см. ниже Отправлено: 18:00, 27-12-2016 | #5 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать Iska, Я не очень понимаю, как работает команда For+Dir. Когда-то очень давно у меня создалось впечатление, что результат выполнения Dir из-под For попадает в некий буфер, и For уже берёт список файлов из этого буфера, а не из реального наличия файла, если по какой-то причине файлы успели удалиться, как здесь, то можно впасть в ошибку. Поэтому я перестраховываюсь. Возможно, это ересь и я не прав. На моём тестовом примере после удаления этого If ничего не изменилось.
alpap, Цитата:
|
|
------- Отправлено: 18:15, 27-12-2016 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
А! Понял, дошло: Вы ведь перебираете именно все файлы, а я перебирал только по маске *.bat. Вопрос снимается. |
|
Отправлено: 18:32, 27-12-2016 | #7 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
|
|
Отправлено: 23:18, 27-12-2016 | #8 |
Ветеран Сообщения: 2735
|
Профиль | Отправить PM | Цитировать alpap,
Для этих файлов ваш алгоритм не работает.
Цитата:
|
|
------- Последний раз редактировалось megaloman, 28-12-2016 в 00:52. Отправлено: 00:28, 28-12-2016 | #9 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать |
Отправлено: 02:57, 28-12-2016 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Батник для сравнения файлов | orgia | Скриптовые языки администрирования Windows | 31 | 02-04-2013 14:01 | |
В Windows 8 появится функция резервного копирования History Vault | OSZone News | Новости и события Microsoft | 5 | 05-04-2011 16:32 | |
CMD/BAT - [решено] Команда копирования файла с указанием времени копирования | Pozia | Скриптовые языки администрирования Windows | 6 | 16-10-2010 04:27 | |
Программа для поточечного сравнения изображений | ShaRP | Программное обеспечение Windows | 6 | 14-02-2008 08:51 | |
Алгоритм сравнения бинарных файлов | Savant | Программирование и базы данных | 2 | 04-05-2005 09:57 |
|