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

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

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

KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows
 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

   

hErAx

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

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

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

  • Отправлено: 01:53 25-10-2015 | Исправлено: Paromshick, 21:51 18-12-2017
    wolf0425



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

    Цитата:
    Имя файла может содержать одиночные кавычки, внешне двойные и две одиночных выглядят одинаково.

    в ФАРе моноширинный шрифт - выглядеть будет не так.
    так что скорее мы видим просто результат преобразования двойных угловых кавычек (есть 1251) в обычные двойные (866)

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 10:10 03-06-2016 | Исправлено: wolf0425, 10:10 03-06-2016
    Jon_Dow

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    wolf0425
    Цитата:
    так что скорее мы видим просто результат преобразования двойных угловых кавычек (есть 1251) в обычные двойные (866)
    присоединяюсь
    И это заведомо не согласуется с утверждением
    Цитата:
    Я же копировал название через комманду:  dir > file.cmd  
    Правильное утверждение будет такое: я тут чего-то накосорезил сам не помню как
     
    nik4z
    терпеливо жду пример утилиты

    Всего записей: 732 | Зарегистр. 25-11-2006 | Отправлено: 10:17 03-06-2016
    nik4z



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

    Цитата:
    пример такой утилиты которая выводит в stderr командную строку своего вызова.  

    Я имел ввиду именно лог работы, а не командную строку своего вызова.
    Это обычно утилиты, которые выводят информацию напрямую в поток stdout, например некоторые архиваторы, а в stderr только лог.

    Всего записей: 218 | Зарегистр. 08-11-2015 | Отправлено: 11:13 03-06-2016
    Jon_Dow

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    nik4z
    Все понятно, с той реальной задачей связи нет. А то я уж подумал что что-то упустил.

    Всего записей: 732 | Зарегистр. 25-11-2006 | Отправлено: 11:15 03-06-2016
    wolf0425



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

    Цитата:
    И это заведомо не согласуется с утверждением  
    Я же копировал название через комманду:  dir > file.cmd  
    Правильное утверждение будет такое: я тут чего-то накосорезил сам не помню как
    а чего не помнить:
    1. запустил dir > file.cmd - получил список, где двойные угловые кавычки заменены на <>
    2. убедился что такие имена не проходят
    3. попытался это исправить не меняя полученную при dir > file кодировку (866). Закономерно не смог.

    Всего записей: 2928 | Зарегистр. 25-04-2007 | Отправлено: 13:51 03-06-2016 | Исправлено: wolf0425, 13:54 03-06-2016
    ArabiQ

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ковычки тут не при чем. Щас эксперементировал - какие тока кавычки не ставил, одинарные, двойные, в разной раскладке, в разной кодировке - не че помогает.
    Как победить то ?

    Всего записей: 15 | Зарегистр. 14-03-2013 | Отправлено: 17:44 03-06-2016
    VitaminP



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    файл Renamer.cmd (кодировка win1251):
    @CHCP 1251>NUL
    ren "c:\2\Счётчик Мыслей - «Кислород».mp3" "001. Счётчик Мыслей - Кислород.mp3"

    Всего записей: 306 | Зарегистр. 28-08-2013 | Отправлено: 18:45 03-06-2016
    Jon_Dow

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ArabiQ
    Давай поступим так: ты приведешь одно единственное имя файла который надо переименовать(из тех на которые выходит ошибка) и во что именно надо переименовывать, укажешь тип файловой системы, точную версию Windows, укажешь национальные настройки которые стоят на твоем компе, а мы, так уж и быть перепроверим
    Так будет однозначно быстрее и точнее.
     
    Добавлено:
    PS - что-то троллем запахло...

    Всего записей: 732 | Зарегистр. 25-11-2006 | Отправлено: 20:04 03-06-2016
    nik4z



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

    Цитата:
    PS - что-то троллем запахло..

    Да просто он неправильно решает задачу.
     
    Его задачка решается простым батничком

    Код:
    @echo off
    set /a count=1
     
    for /f "delims=" %%a in ('dir /b /o:n "c:\2\*.mp3"') do call :rename "%%a"
    goto :eof
     
    :rename
    set count1=000%count%
    set count1=%count1:~-3%
    ren "%~dpnx1" "%count1%. %~nx1"  
    set /a count+=1
    goto :eof

     
    А использовать сторонние средства  (имеется в виду редактор), который может искорежить все по своему усмотрению попросту глупо.
     
     

    Всего записей: 218 | Зарегистр. 08-11-2015 | Отправлено: 07:22 04-06-2016 | Исправлено: nik4z, 07:45 04-06-2016
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Всем привет, добавил пару ссылок в полезных ссылках в шапке (первые 2 ссылки), а также обновил ссылки на утилиты wget и добавил wgetx64 в полезных утилитах
     
    Задача такова:
    есть некий текст
    вывод
     
    из которого мне надо получить максимальную версию файла, то есть tcmd852ax64.exe
     
    задачу решил, но, на мой взгляд, недостаточно оптимально, слишком много выводов в файл и прочее, жду ваших решений (так как давно не писал сам) и после, если понадобится, могу кинуть свое

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 18:53 04-06-2016
    Pasha_ZZZ



    Platinum Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Nagual
    Вот сразу для обеих версий (х32/х64)
    Цитата:
    wge% -nv -O- "http://ghisler.com/amazons3.php"|grep -iE "tcmd.*x32\.exe|tcmd.*x64\.exe"|sed "s/<\/a>.*$//;s/^.*href=//;s/>.*$//;s/""""//g"|wget -i-
    не знаю как насчет оптимальности, но работает без вывода в файлы

    Всего записей: 12375 | Зарегистр. 11-03-2002 | Отправлено: 19:09 04-06-2016
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Pasha_ZZZ
    спасибо, что надо, переделал немного, исключив утилиты sed и grep и оставив только 64 битную версию
     
    for /f "tokens=2 delims==>" %%a in ('wget64 -nv -O- %site%^|findstr /c:"64-bit version only"') do wget64 -N -nd -c -t 0 %%a

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 20:45 04-06-2016 | Исправлено: Nagual, 20:54 04-06-2016
    Nagual



    Full Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Уважаемые писатели команд и командных сценариев, рад сообщить о выходе этой новости
     
    Возможно, теперь мы сможем пользоваться более богатым функционалом linux в среде windows

    Всего записей: 528 | Зарегистр. 06-01-2006 | Отправлено: 17:26 07-06-2016
    ipmanyak



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

    Код:
     
    rem для файлов примерно так
    for /f "tokens=*" %%i in ('dir /b /s /a:-d') do (  
         echo  %%~ni  
         if not exist  путьккаталогуB\%%~ni (
            del /q   %%~fi
                                              )  
                                                                     )
     
       
    для удаления каталогов команда    rmdir


    ----------
    В сортире лучше быть юзером, чем админом...

    Всего записей: 11724 | Зарегистр. 10-12-2003 | Отправлено: 08:00 08-06-2016 | Исправлено: ipmanyak, 08:01 08-06-2016
    Ciber SLasH



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Ciber SLasH 14:10 26-05-2016
    Цитата:
    Приветствую всех!  
     Нужно из BAT-ника, перед запуском программы, определить не нажата ли клавиша  <Shift>. Если нажата, то запустить программу.  
     Как это реализовать?

    Т.к. готового решения не нашёл, то пришлось писать программу:
    getKey.exe [sec]
    getKey.exe /h
    ExitCode: 0 - <SHIFT> нажали, 1 - не нажимали, -X - ошибки
    getKey

    Всего записей: 262 | Зарегистр. 07-04-2016 | Отправлено: 03:12 14-06-2016 | Исправлено: Ciber SLasH, 09:43 14-06-2016
    Nikoderiko

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть папка. В ней куча подпапок. В каждой подпапке ещё папка. И в этой папке куча джипегов.
    Как перенести все джипеги "на уровень выше"?
     
    То есть например:
    из C/X1/1 в C/X1  
    из C/X2/2 в C/X2  
    и так далее ???

    Всего записей: 808 | Зарегистр. 17-07-2002 | Отправлено: 23:07 15-06-2016
    Ciber SLasH



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

    Код:
    @echo off
    if "%~1"=="" (
        echo Usage: %~nx0 <fullPath for folder>
        pause & goto :EOF
    )
    if not exist "%~1" (
        echo "%~1" not exist!
        pause & goto :EOF
    )
    setlocal EnableDelayEdExpansion
    set "folder=%~dp1"
    for /r "%folder%" %%A in (*) do (
        set "t=%%~dpA"
        set "t=!t:~0,-1!"
        for %%B in ("!t!") do (
            set "to=%%~dpB"
        )
        move /Y "%%~A" "!to!"
    )
    endlocal

    Всего записей: 262 | Зарегистр. 07-04-2016 | Отправлено: 23:32 15-06-2016 | Исправлено: Ciber SLasH, 23:34 15-06-2016
    tong9

    Newbie
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Непонятки привыполнении команды из консоли и из батника.  
     
    Если запустить команду из консоли, то файлик по маске находится и копируется  
    FOR %a in (m:\Папка\*mask*) DO XCOPY %a "m:\Папка\files" /f /h /k /y  
     
    Если запускаю из bat файла  
    FOR %%a in (m:\Папка\*mask*) DO XCOPY %%a "m:\Папка\files" /f /h /k /y  
    то выдаётся ошибка "The system cannot write to the specified device."  
     
    Погуглил ошибку и вроде как это возможно связано с кодировкой, но решения так и не нашёл.  
     
    Если кто в курсе, что можно попробовать сделать, откликнитесь

    Всего записей: 11 | Зарегистр. 27-02-2015 | Отправлено: 16:18 16-06-2016
    YuS_two



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

    Цитата:
    Если кто в курсе, что можно попробовать сделать, откликнитесь

    Пакетный сценарий надо сохранить в кодировке cp866 (OEM)

    Всего записей: 399 | Зарегистр. 28-03-2016 | Отправлено: 17:02 16-06-2016
    AntoshAReal



    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Приветствую!
    Прошу помочь со скриптом, т.к. он что-то не работает
     

    Код:
     
    :hide
    @echo off
    @SetLocal EnableExtensions EnableDelayedExpansion
     
    rem check pc name
    set netlogon=%logonserver%\netlogon
     
    for /F %%t in ('type "%netlogon%\Server.txt"') do (
    if /I "%%t"=="%Computername%" (call "%netlogon%\server.cmd") else (call "%netlogon%\user_pc.cmd")  
    )
     
    @endlocal
     

     
    Вообщем он раньше работал, но потом перестал, возможно в нём что-то поменяли.
    Работает так:
    1. при запуске проверяет имя компа, если это имя содержится в файле Server.txt (в файле может быть много строк с разными именами), то выполняем скрипт server.cmd
    2. если не содержится, то выполняем user_pc.cmd
     
    Почему-то выполняется только первое условие.

    Всего записей: 305 | Зарегистр. 31-08-2005 | Отправлено: 11:27 17-06-2016 | Исправлено: AntoshAReal, 11:30 17-06-2016
       

    Страницы: 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

    Компьютерный форум Ru.Board » Операционные системы » Microsoft Windows » Задачи на bat-файлах 12
    KLASS (06-03-2018 00:44): Объединение тем по сценариям: Сценарии Windows


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

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

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru