Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6

Модерирует : KLASS, IFkO

vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1  Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

   

vu1tur



Moderator-Saaber
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Задачи на bat-файлах 6
(часть 1, часть 2, часть 3, часть 4, часть 5)
Вопросы, задачи и их решения по работе с командными файлами, а также сопутствующие ссылки.

 
Важно: копируя батник через буфер обмена из форума не забывайте удалять пробелы в конце каждой строки, т.к. в некоторых случаях из-за этого программа будет работать неправильно!!!
 
Также для удаления концевых пробелов пользуйтесь скриптом от Nagual, или VBS-Скрипт-Модулем от ViSiToR.
 
Для перекодирования кирилицы 866<<>>1251 пользуйтесь онлайн сервисом Перекодировщик кириллицы

 
Дополняем шапку: добавляем готовые решения, полезные ссылки.
 
Примечание: Большие куски кода заключайте в тэг [more]  
 
Смежные темы:
В помощь системному администратору » Автоматизация администрирования
Программы » Командная строка, батники\сценарии
 
Полезные ссылки
 
Полезные утилиты
 
Готовые решения и частые вопросы:
  • Встроенный справочник по командам
  • Создание помощи по всем командам консоли 2000 и XP
  • Делаем паузу в командном файле стандартными средствами Windows
  • Альтернативные решения »
  • Работа с текстом, датой, и файлами »
  • Администрирование, автоматизация и сеть »
  • Работа с переменными и параметрами ком. строки »
     
    Описания работы команд и символов участниками темы:
    · setlocal enabledelayedexpansion и переменные окружения
    · символы & и && в командной строке
    · Переменная %0





    http://forum.ru-board.com/topic.cgi?forum=62&topic=17154

  • Всего записей: 3690 | Зарегистр. 01-02-2003 | Отправлено: 23:07 04-11-2008 | Исправлено: vu1tur, 11:38 26-05-2009
    DESperado

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть файл list.txt

    Код:
     user-1
    user-2  

    Есть батник

    Код:
     
    for /F "eol=;" %%i in (%~dp0list.txt) do call ing_test %%i
    ing_test
      @echo Комп %1 >> %~dp0ping.txt
    GoTo :EOF  
     
     

     
     

    Всего записей: 110 | Зарегистр. 01-03-2004 | Отправлено: 16:09 17-03-2009
    Mr_Hat



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Объястните пожалуйста в чем проблема,
    пересылаю по сети bat файл в кодировке 866 (OEM - русская)
    с наличием кирилицы в теле файла,
    а получный файл уже имеет кодировку  1251 (ANSI - кирилица)
    Как это исправить, а точнее не допустить изменения кодировки при пересылке.
     
    P.S.  одинаковый результат как при передаче по Ftp так и через сетевое окружение.

    Всего записей: 984 | Зарегистр. 04-10-2005 | Отправлено: 17:27 17-03-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DESperado
    а где вопрос?
    Mr_Hat
    не написал, как пересылаешь
    есть подозрение, что в текстовом режиме
    надо поставить бинарный

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 21:23 17-03-2009
    Mr_Hat



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual
    Пересылаю, тотал командером, но там нет в настройках бинарного режима.

    Всего записей: 984 | Зарегистр. 04-10-2005 | Отправлено: 22:23 17-03-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mr_Hat
    TC - Настройка - FTP - Режим по умолчанию: Двоичный (zip, doc и т.д.)

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 00:45 18-03-2009
    DESperado

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть файл list.txt c таким содержимым

    Код:
    user-1
    user-2

    Есть bat-файл, работающий с этим файлом и формирующий на выходе файл ping.txt

    Код:
    @echo off
    cls
    for /F "eol=;" %%i in (%~dp0list.txt) do call :ping_test %%i
     
    :ping_test
      @echo Комп %1 >> %~dp0ping.txt
    GoTo :EOF  
    :EOF

    Вот внутренности ping.txt

    Код:
    Комп user-1  
    Комп user-2  
    Комп  

    Вопрос. Почему в  выходном файле 3 строки, хотя во входном для обработки две? Почему появляется эта строка "Комп  "?
     
    Добавлено:
    Сам себе и отвечаю :)
    Нужно было после строки  

    Код:
    for /F "eol=;" %%i in (%~dp0list.txt) do call :ping_test %%i
     

    Поставить  goto :EOF

    Всего записей: 110 | Зарегистр. 01-03-2004 | Отправлено: 08:45 18-03-2009 | Исправлено: DESperado, 08:50 18-03-2009
    DamNet

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Здравствуйте, помогите хотя бы советом, всю голову сломал (
     
    Есть некий каталок, в нем куча подпапок, в каждой подпапке есть файлики, выглядит примерно так:
    D:\Papka\Podpapka\File1.xls
    D:\Papka\Podpapka\File2.xls
    D:\Papka\Podpapka\File3.xls
    D:\Papka\Podpapka\File4.xls
    D:\Papka\Podpapka2\File1.xls
    D:\Papka\Podpapka2\File2.xls
    D:\Papka\Podpapka2\File3.xls
    D:\Papka\Podpapka2\File4.xls
    и.т.д.  
     
    Задача в общем-то простая, пройти по всем подпапкам и создать ещё подпапку, в которую переместить все файлы содержащии в имени например тотже "file"., тоесть:
    D:\Papka\Podpapka\SecondOne\File1.xls
    D:\Papka\Podpapka\SecondOne\File2.xls
    D:\Papka\Podpapka\SecondOne\File3.xls
    D:\Papka\Podpapka\SecondOne\File4.xls
    D:\Papka\Podpapka2\SecondOne\File1.xls
    D:\Papka\Podpapka2\SecondOne\File2.xls
    D:\Papka\Podpapka2\SecondOne\File3.xls
    D:\Papka\Podpapka2\SecondOne\File4.xls
     
    Алгоритм представляю себе так, что берётся имя каталога (Podpapka) загоняется в переменную, заходим в эту подпапку делаем простейшие действия md, move, cd.. и так с каждым каталогом... вот только как сделать проход по всем каталогам, ума я что-то не приложу..
     
    За любую помощь заранее спасибо.!

    Всего записей: 46 | Зарегистр. 12-08-2003 | Отправлено: 12:34 18-03-2009
    DESperado

    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Вот еще одна мучающая загадка в этом же коде
    В файле  list.txt находится заведомо неверное имя машины.
    Но не могу понять почему при выполнеии батник заходит в ветку :WORK

    Код:
    @echo off
    chcp 1251 >nul
    cls
    for /F "eol=;" %%i in (%~dp0list.txt) do call :ping_test %%i
    goto :EOF
     
    :ping_test
      Ping -n 1 %1 >Nul  
      @echo ErrorLevel - %ErrorLevel%  
      If ErrorLevel = 0 (Goto :WORK %1)  
      If ErrorLevel = 1 (Goto :NOT_WORK %1)  
    GoTo :EOF  
     
    :WORK
      if %on_off%==Выйти net send %1 "Выйдите из программы"  
      if %on_off%==Зайти net send %1 "Можно работать в программе"  
    GoTo :EOF  
     
    :NOT_WORK
      @Echo Комп %1 не работает  
    GoTo :EOF  
     
    :EOF


    Всего записей: 110 | Зарегистр. 01-03-2004 | Отправлено: 12:37 18-03-2009
    meandme



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Комрады, помогите написать батник, который будет выполнять следующее :
    1. Копировать все содержимое папки C:\Net, включая подкаталоги и т.д. (ip 192.168.0.1 источника) на машину в лок.сети с адресом 192.168.0.2 (к примеру) в папку диска D:\Net.
    2. Заменять все существующие файлы.

    Всего записей: 110 | Зарегистр. 07-04-2008 | Отправлено: 13:26 18-03-2009 | Исправлено: meandme, 13:28 18-03-2009
    Mr_Hat



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    meandme

    Код:
    @echo off
    copy /y /z "\\192.168.0.1\net" "\\192.168.0.2\net"

    Всего записей: 984 | Зарегистр. 04-10-2005 | Отправлено: 13:49 18-03-2009 | Исправлено: Mr_Hat, 13:53 18-03-2009
    king_stiven

    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DamNet
    Что то вроде

    Код:
    FOR /D %%e in ("D:\Papka\*") do (
        FOR /f %%d in ('dir %%e /b /a:-d ^| find /i "file"') do (
            md "%%e\SecondOne" > nul
            move "%%e\%%d" "%%e\SecondOne" > nul
        )
    )

    Всего записей: 2229 | Зарегистр. 17-07-2006 | Отправлено: 14:07 18-03-2009
    meandme



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Mr_Hat Спасибо!
    Теперь другая трабла, батник копирует только папку NET, а вложенные папки и файлы - нет

    Всего записей: 110 | Зарегистр. 07-04-2008 | Отправлено: 14:19 18-03-2009 | Исправлено: meandme, 14:24 18-03-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DamNet
    как-то так попробуй:
    Код:
    set d=SecondOne
    for /f %%a in ('dir/b/s/a:d') do md "%%a\%d%" 2>nul && move/y "%%a\*" "%%a\%d%\"
    если файлов в конечной папке нет, надо делать дополнительную проверку
     
    meandme
    robocopy/mir "что" "\\к\у\д\а"

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 14:21 18-03-2009 | Исправлено: Nagual, 14:46 18-03-2009
    meandme



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Nagual сейчас попробую. . Получилось! Комрады, спасибо за помощь!

    Всего записей: 110 | Зарегистр. 07-04-2008 | Отправлено: 14:39 18-03-2009 | Исправлено: meandme, 14:47 18-03-2009
    DamNet

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    king_stiven  
     
    Спасибо большое, всё супер, кроме того момента, что в имни файла присутствуют пробелы, которые скриптом не воспринимаются ((

    Всего записей: 46 | Зарегистр. 12-08-2003 | Отправлено: 14:39 18-03-2009
    yahooeyu

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Скажите, пожалуйста, как сделать, чтобы батник проверял в директории Windows  на наличие новых (не по дате) файлов, и если такие имеются записывал в текстовый файл.
    Возможно, что батник сверялся бы с уже имеющимся списком файлов из текстового файла. Можно ли обойтись без этого списка. Если нет, то как будет написана программа.

    Всего записей: 1 | Зарегистр. 18-03-2009 | Отправлено: 14:41 18-03-2009
    DamNet

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Nagual
     
    Спасибо большое ) а как сделать, что бы не все файлы копировались, а только содержащие некий фрагмент в имени файла?*
     

    Всего записей: 46 | Зарегистр. 12-08-2003 | Отправлено: 14:49 18-03-2009
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    DamNet
    очевидно, поменять (*) в выражении "%%a\*" на свой фрагмент, например, "%%a\*fragment*.zip"

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 15:35 18-03-2009
    whoyou

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Помогите исправить ошибку в батнике либо дать совет. Под ХР нумерация увеличивается, а под 2003 сервером файл 1.txt становится размером 0 байт.
    (В папку d:\outgoing\ падают файлы они переименуются в конце добовляется счетчик, должен наростающий, потом фалы переносятся в другую папку, и так бесконечный процес пришли-переименовали-перенесли).
     
    @Echo On  
    Set f_Ext=dat
    Set f_Ok=ok
    for /f "usebackq tokens=*" %%c in ("%temp%\1.txt") do Set f_Count=%%c
    For %%a In (d:\outgoing\*.*) Do @Call :Rena %%a %%~ta
    exit
     
    goto :EOF
     
    :Rena
    Set /a f_Count=%f_Count%+1
    Set f_Name=%1
    Set f_Date=%2
    Set f_Time=%3
    Set f_Day=%f_Date:~0,2%
    Set f_Month=%f_Date:~3,2%
    Set f_Year=%f_Date:~6,4%
    Set f_Hour=%f_Time:~0,2%
    Set f_Min=%f_Time:~3,2%
    Set f_NewName=out-%f_Year%%f_Month%%f_Day%-%f_Hour%%f_Min%-%f_Count%
    echo %f_Count%>"c:\1.txt"
     
    If Exist %f_NewName% Set f_NewName=%f_NewName%-%f_Count%
    Ren %f_Name% %f_NewName%.%f_Ext%
     
    copy nul d:\outgoing\out-%f_Year%%f_Month%%f_Day%-%f_Hour%%f_Min%-%f_Count%.%f_Ext%.%f_Ok%
     
    goto :EOF
     
    Заранее благодарен
     
    Добавлено:
    Помогите исправить батник. Под ХР счетчик работает - увеличивается, а под 2003 Серером файл 1.txt нулевой. (приходят файлы, переименовуются добовляя счетчик, а потом переносятся в архив).
     
     
    @Echo On  
    Set f_Ext=dat
    Set f_Ok=ok
    for /f "usebackq tokens=*" %%c in ("%temp%\1.txt") do Set f_Count=%%c
    For %%a In (d:\outgoing\*.*) Do @Call :Rena %%a %%~ta
    exit
     
    goto :EOF
     
    :Rena
    Set /a f_Count=%f_Count%+1
    Set f_Name=%1
    Set f_Date=%2
    Set f_Time=%3
    Set f_Day=%f_Date:~0,2%
    Set f_Month=%f_Date:~3,2%
    Set f_Year=%f_Date:~6,4%
    Set f_Hour=%f_Time:~0,2%
    Set f_Min=%f_Time:~3,2%
    Set f_NewName=out-%f_Year%%f_Month%%f_Day%-%f_Hour%%f_Min%-%f_Count%
    echo %f_Count%>"c:\1.txt"
     
    If Exist %f_NewName% Set f_NewName=%f_NewName%-%f_Count%
    Ren %f_Name% %f_NewName%.%f_Ext%
     
    copy nul d:\outgoing\out-%f_Year%%f_Month%%f_Day%-%f_Hour%%f_Min%-%f_Count%.%f_Ext%.%f_Ok%
     
    goto :EOF
     
    Заранее благодарен

    Всего записей: 23 | Зарегистр. 30-01-2009 | Отправлено: 15:39 18-03-2009
    DamNet

    Junior Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Nagual
     
    СПАСИБО!!! всё получилось!

    Всего записей: 46 | Зарегистр. 12-08-2003 | Отправлено: 15:53 18-03-2009
       

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 6
    vu1tur (26-05-2009 11:39): часть 7 — http://forum.ru-board.com/topic.cgi?forum=62&topic=17154#1


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru