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

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

Ответить
Настройки темы
CMD/BAT - [решено] Копирование из каталога в каталог по условию

Пользователь


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

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


Здравствуйте. Помогите пожалуйста.

chcp 65001

rem объявляю переменные

set DirNaznachenie="Z:\kuda_kopiruestya"
set DirNaznachenieFile="Z:\kuda_kopiruestya\DirNaznachenieFile.txt"
set FindstrResultatFile="Z:\kuda_kopiruestya\FindstrResultatFile.txt"
set DirNaznachenieMmYyyy="Z:\kuda_kopiruestya\%mmyy%"
set mm=%date:~3,2%
set yy=%date:~8,2%
set yyyy=%date:~6,4%
set mmyy=%mm%.%yy%
set mmPlus="%mm%*"
set TekGod="Z:\otkuda_kopiruestya\%yyyy%"
set TekGodMesyac="Z:\otkuda_kopiruestya\%yyyy%\%mm%"
set TekGodMesyacPlus="Z:\otkuda_kopiruestya\%yyyy%\%mmPlus%"

rem проверка существования директории-источника, то есть создал ли пользователь дирекорию, которая будет наполняться целевыми файлами

if exist %TekGodMesyacPlus% goto :ProverkaDirNaznach
if not exist %TekGodMesyacPlus% goto :end

:ProverkaDirNaznach

rem получаем список имен каталогов в директории назначения и сохраняем в файл, чтобы проверить, не создан ли уже каталог с наименовнаием %mmyy%

dir /b /d %DirNaznachenie% > %DirNaznachenieFile%

rem проверяем есть ли в директории каталог, в имени которого текущий месяц и год (по условию), то есть, например каталог с наименованием 05.21

findstr /c:%mmyy% %DirNaznachenieFile% > %FindstrResultatFile%

rem если, ниже, в команде for не будет usebackq и выражение будет в '' кавычках, то вывод будет Z:\PTO, а не ожидаемый, поэтому кавычки убираем, usebackq добавляем
rem если есть, то выход и удаление текстовых файлов, копирование файлов в созданный каталог, если нет, то создается директория (а потом - также, копируются файлы *.xls, удаляются созданные *.txt

FOR /F "usebackq tokens=1 delims= " %i in (%FindstrResultatFile%) do if %i equ "" goto :procedura else goto :end

:procedura
mkdir %DirNaznachenieMmYyyy%
del %DirNaznachenieFile%, %FindstrResultatFile%
goto :kopirovanie
exit

:kopirovanie
xcopy /d %TekGodMesyacPlus%\408*.xls %DirNaznachenieMmYyyy%
exit

:end


Застопорился тут:

FOR /F "usebackq tokens=1 delims= " %i in (%FindstrResultatFile%) do if %i equ "" goto :procedura else goto :end

По какой-то не понятной мне причине не переходит к :procedura

В данном случае в файле FindstrResultatFile.txt - ничего нет, он пустой. Сравниваю тоже с пустым значением, но почему-то не переходит дальше.

Пробовал
FOR /F "usebackq tokens=* delims= "
FOR /F "usebackq tokens=*"
FOR /F "usebackq"

Все равно не переходит...

Помогите пожалуйста разобраться и сделать, чтобы был переход к процедуре

Отправлено: 14:38, 11-05-2021

 

Ветеран


Contributor


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

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


Цитата Elven:
FOR /F "usebackq tokens=1 delims= " %%i in (%FindstrResultatFile%) do if %i equ "" ( »
Чтобы это сработало, надо, чтобы в файле первой строкой была строка "" (именно с кавычками), иначе, ИМХО, такой If под For не сработает никогда, ИМХО, For просто пропустит пустую строку. Хотелось бы посмотреть пример реального файла (epoddubniy, предоставьте пожалуйста) и придумать для него работающее решение.
epoddubniy, Вообще-то, если хотите (ИМХО, похвально!), организовывать код в виде выделенных процедур, то GoTo не годится, надо использовать Call.
У Вас, например, есть процедура:
Код: Выделить весь код
:procedura
....
Exit /B
Если делаете GoTo :procedura - выполнение командного файла завершится. В отличии от
Call :procedura
После этого выполнение командного файла продолжится дальше

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


Последний раз редактировалось megaloman, 14-05-2021 в 11:55.

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

Отправлено: 11:29, 14-05-2021 | #11



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

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


Аватара для Elven

Ветеран


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

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


Цитата megaloman:
Чтобы это сработало »
даже не всматривался в код, просто скопировал строку.

Отправлено: 12:59, 14-05-2021 | #12


Ветеран


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

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


что вы спорите, если условие задачи вообще никуда:
копировать по условию, а условие - есть папка или нет (та, куда копируем) и если нет создаем. Я понимаю, если папки сами создаются, я и задавал выше ТС подобные вопросы поэтому. В данном случае условие это: или появление нового(ых) файла(ов) или момент запуска кода, последнее я и брал за условие в моем коде на PS.

Отправлено: 15:14, 14-05-2021 | #13



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Перемещение файлов из каталога в каталог servad Скриптовые языки администрирования Windows 9 30-01-2020 03:50
CMD/BAT - [решено] Копирование строк в отдельный файл по условию Seryoga204 Скриптовые языки администрирования Windows 26 24-08-2016 23:33
CMD/BAT - Скопировать файл из текущего каталога в каталог уровнем выше adrin Скриптовые языки администрирования Windows 2 22-12-2015 17:52
CMD/BAT - [решено] Копирование файла по условию его содержимого XSubZero Скриптовые языки администрирования Windows 3 16-05-2012 17:13
CMD/BAT - [решено] Копирование и запуск по условию AlexVong Скриптовые языки администрирования Windows 2 25-10-2010 14:03




 
Переход