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

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в 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
    NIKZZZZ



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

    Код:
    @echo off
    :_1
    if "%1"=="" goto :_2
    "%~dp0_rawzor.exe" "-c" "-i" "%1"
    shift
    goto :_1
    :_2
    goto :eof


    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 21:28 01-11-2017
    MH100181Q



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

    Всего записей: 1420 | Зарегистр. 29-04-2008 | Отправлено: 22:18 01-11-2017
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    MH100181Q
    Уберите @echo off  , поставьте в конце pause и приведите лог.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 22:28 01-11-2017
    MH100181Q



    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Консолька просто вылетает, пауза не работает с таким кодом, вот файлы https://cloud.mail.ru/public/WJkN/SHuPMLbYx

    Всего записей: 1420 | Зарегистр. 29-04-2008 | Отправлено: 23:15 01-11-2017
    GeMir



    Ich finde dich
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Есть папка а в ней - 400 вложенных. В каждой из оных по паре-тройке файлов.  
    Хотелось бы взять файлы из каждой папки и скопировать либо в коренную папку, либо в отдельную новую.
     
    Буду очень признателен за помощь.

    Всего записей: 10296 | Зарегистр. 15-02-2004 | Отправлено: 02:00 02-11-2017
    NIKZZZZ



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

    Код:
    @echo off
    cd /d "%~dp0"
    :_1  
    if x%1==x goto :_2  
    _rawzor.exe -c -i "%~1"  
    shift  
    goto :_1  
    :_2  
    pause
    goto :eof

     
    GeMir

    Код:
    for /f "delims=" %%a in ('dir /b /s /a:-d "c:\source\*.*" ') do copy /y "%%~fa" "c:\dest\"

    c:\source - откуда
    c:\dest - куда

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 04:57 02-11-2017
    GeMir



    Ich finde dich
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Большое спасибо. Знаков процента только не два а один: %a и %~fa, верно?
    С двумя вылетает с синтаксической ошибкой.
     
    В логе ошибок не нахожу, но скопировались, почему-то, только 993 из 1013 файлов.
    Вероятно дело в совпадении имён? Если возможность исключить перезапись?

    Всего записей: 10296 | Зарегистр. 15-02-2004 | Отправлено: 12:35 02-11-2017 | Исправлено: GeMir, 12:40 02-11-2017
    NIKZZZZ



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

    Цитата:
    Знаков процента только не два а один: %a и %~fa, верно?  

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

    Цитата:
    Если возможность исключить перезапись?


    Код:
    for /f "delims=" %%a in ('dir /b /s /a:-d "c:\source\*.*" ') do echo.No|copy /-y "%%~fa" "c:\dest\"  

     
     
     

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 13:10 02-11-2017
    GeMir



    Ich finde dich
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    NIKZZZZ
    Увы, эффект тот же. 20 файлов не хватает :|
     
    Сделал так:

    Код:
    for /f "delims=" %a in ('dir /b /s /a:-d "с:\source\*.*" ') do echo.No|move /-y "%~fa" "с:\dest\"

    Нашёл пропажу.
    Ещё раз спасибо!

    Всего записей: 10296 | Зарегистр. 15-02-2004 | Отправлено: 15:16 02-11-2017 | Исправлено: GeMir, 15:29 02-11-2017
    NIKZZZZ



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    GeMir
    Так если имена совпадают, естественно их будет не хватать, в одном каталоге не может быть несколько файлов с одинаковыми именами.
    Обычно проблема решается переименовыванием файла, например к имени добавляется индекс.

    Всего записей: 5365 | Зарегистр. 08-02-2006 | Отправлено: 15:29 02-11-2017
    AntoshAReal



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

    Код:
     
    @echo off
    rem http://www.dostips.com/forum/viewtopic.php?t=6063
    cd "%~dp0"
     
    setlocal enableextensions enabledelayedexpansion
     
    for %%a in ("C:\letsencrypt-win-simple\cert\crt\*.pfx") do (
     
    set filename=%%~na.pfx
    REM echo filenames: "!filename!"
     
     
    set afile=C:\letsencrypt-win-simple\cert\crt\!filename!
    set bfile=C:\DFSRoots\dfs\nps\cert\!filename!
     
     
    call :FileModTime !afile! A
    call :FileModTime !bfile! B
    set diff=0
    if defined A if defined B set /a diff=B-A
    if !A! gtr !B! if !diff! lss -2 call :anewer
    if !B! gtr !A! if !diff! gtr 2 call :bnewer
    if !diff! leq 2 if !diff! geq -2 call :equally
    )
    exit /b 0
     
    :anewer
    echo "file !filename! A newer - C:\letsencrypt-win-simple\cert\crt"
    endlocal
    exit /b 0
     
    :bnewer
    echo "file !filename! B newer - C:\DFSRoots\dfs\nps\cert"
    endlocal
    exit /b 0
     
    :equally
    echo "files timestamp is identical or in tolerance (2 seconds)"
    endlocal
    exit /b 0
     
     
    :FileModTime  File  [TimeVar]
    ::
    ::  Computes the Unix time (epoch time) for the last modified timestamp for File.
    ::  The result is an empty string if the file does not exist. Stores the result
    ::  in TimeVar, or prints the result if TimeVar is not specified.
    ::
    ::  Unix time = number of seconds since midnight, January 1, 1970 GMT
    ::
    setlocal disableDelayedExpansion
    :: Get full path of file
    for %%F in ("%~1") do set "file=%%~fF"
    :: Get last modified time in YYYYMMDDHHMMSS format
    set "time="
    for /f "skip=1 delims=,. tokens=2" %%A in (
      'wmic datafile where "name='%file:\=\\%'" get lastModified /format:csv 2^>nul'
    ) do set "ts=%%A"
    set "ts=%ts%"
    :: Convert time to Unix time (aka epoch time)
    if defined ts (
      set /a "yy=10000%ts:~0,4% %% 10000, mm=100%ts:~4,2% %% 100, dd=100%ts:~6,2% %% 100"
      set /a "dd=dd-2472663+1461*(yy+4800+(mm-14)/12)/4+367*(mm-2-(mm-14)/12*12)/12-3*((yy+4900+(mm-14)/12)/100)/4"
      set /a "ss=(((1%ts:~8,2%*60)+1%ts:~10,2%)*60)+1%ts:~12,2%-366100-%ts:~21,1%((1%ts:~22,3%*60)-60000)"
      set /a "ts=ss+dd*86400"
    )
    :: Return the result
    endlocal & if "%~2" neq "" (set "%~2=%ts%") else echo(%ts%)
     

    Всего записей: 305 | Зарегистр. 31-08-2005 | Отправлено: 07:20 03-11-2017 | Исправлено: AntoshAReal, 12:48 15-11-2017
    alex52mail

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    1).  Как монтировать vhd без остановки скрипта  cmd. Такие команды
    Код:
    ........
    diskpart
    select vdisk file=%vhd%
    attach vdisk
    assign letter=%drWinL%
    exit
    echo === vhd===%vhd% is mounted on L==%drWinL%
    pause
    приводят к остановке скрипта на команде diskpart с предложением ввести далее вручную. Как монтировать без остановки скрипта, с его автоматическим продолжением?
     
    2).  И наоборот, как чтобы окно cmd само закрывалось после выполнения  cmd команды типа
    Код:
    FOR %%I IN (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF EXIST "%%I:\Total Commander" ("%%I:\Total Commander\Totalcmd.exe" & exit)
    exit
    goto :eof
    Окно cmd висит пока его не зароешь сам, или закроешь исполняемую команду.
    Пробовал Start ... без успеха.
     
    3). Последнее время в скриптах стал встречать типа  !filename!  - что  означает взятие в !...! ?  
     
     

    Всего записей: 1567 | Зарегистр. 04-09-2015 | Отправлено: 19:10 05-11-2017 | Исправлено: alex52mail, 19:18 05-11-2017
    Inoz2000



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

    alex52mail
    1)
    Код:

    (echo select vdisk file=%vhd%
    echo attach vdisk
    echo assign letter=%drWinL%
    echo exit
    )|diskpart
    2)
    Код:

    FOR %%I IN (C D E F G H I J K L M N O P Q R S T U V W X Y Z) DO IF EXIST "%%I:\Total Commander" start "" "%%I:\Total Commander\Totalcmd.exe"
    exit
    3)Читайте, читайте…. В т.ч. шапку. setlocal enabledelayedexpansion и переменные окружения

    ----------
    Мы все умрём. (-:

    Всего записей: 4891 | Зарегистр. 23-04-2009 | Отправлено: 19:31 05-11-2017
    Koster_2



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

    Всего записей: 161 | Зарегистр. 08-12-2002 | Отправлено: 00:20 10-11-2017 | Исправлено: Koster_2, 17:21 13-11-2017
    Inoz2000



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

    Всего записей: 4891 | Зарегистр. 23-04-2009 | Отправлено: 00:52 10-11-2017
    AlexM2222



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Здравствуйте! Помогите решить задачу?
    Есть папка с кучей файлов(1.txt, 2.txt, 3.txt и т.д. по порядку до нескольких тысяч). Нужно переименовать, например файлы (3.txt и до конца с прибавлением какого-то числа, например 5, чтобы стало 8.txt и т.д.).
    Заранее Спасибо!

    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 10:44 10-11-2017
    Inoz2000



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

    @echo off
    SETLOCAL enabledelayedexpansion
    SET ext=txt
    SET/A i=5
    for %%f in (*.%ext%) do SET/A iName=%%~nf+%i%&REN %%f !iName!.NEW%ext%
    for %%f in (*.NEW%ext%) do REN %%f %%~nf.%ext%


    ----------
    Мы все умрём. (-:

    Всего записей: 4891 | Зарегистр. 23-04-2009 | Отправлено: 11:19 10-11-2017
    AlexM2222



    Junior Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Inoz2000, спасибо помогло!
    Хотелось, чтобы можно было указывать начало и конец переименования.
    Хотелка на песпективу


    Всего записей: 116 | Зарегистр. 05-09-2010 | Отправлено: 14:27 10-11-2017 | Исправлено: AlexM2222, 14:29 10-11-2017
    Inoz2000



    Silver Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    AlexM2222
    можно конечно сделать и так, как вы хотите, но требуется пояснение. вы сами представляете кнечный результат?
    допустим, файлов 20 и конец переименования равен 15, тогда файлы с 16.txt по 20.txt переименовывать не нужно, но что нужно делать с файлами 11 - 15, которые увеличивают свой номер на +5, вы не уточняете.


    ----------
    Мы все умрём. (-:

    Всего записей: 4891 | Зарегистр. 23-04-2009 | Отправлено: 14:58 10-11-2017 | Исправлено: Inoz2000, 15:02 10-11-2017
    Koster_2



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

    Код:
    REGEDIT4
    [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon]
    "Userinit"=-

    а как в батнике это реализовать? такой батник что ниже, не удаляет. (WinXP)

    Код:
    reg delete "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v Userinit /f

    Всего записей: 161 | Зарегистр. 08-12-2002 | Отправлено: 17:19 13-11-2017
       

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