Полезные скрипты CMD/BAT

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Блокировка / Разблокировка папок и файлов с помощью установки прав

Блокировщик может подойти как поверхностная защита для флешек от не очень умных вирусов.
Расблокировщик, например, также может помочь, когда у Вас не хватает прав для доступа к папке / файлу.

Использование:
Скачать и распаковать архив.

Unlock - расблокировщик
Lock - блокировщик

3 варианта использования:

Вариант 1) Скопировать на флешку и запустить.

Вариант 2) Перетянуть папку или файл сверху на этот батник

Вариант 3) Через контекстное меню правой кнопкой мыши по нужному файлу или папке => "Отправить".
Для этого Вам нужно предварительно скопировать файлы Lock.cmd и Unlock.cmd в папку SendTo.
SendTo Вы можете найти, нажав Пуск => в поисковую строку введите Shell:SendTo
_________________________________
Какие права устанавливаются?
В "Варианте 1" папку можно просматривать, читать и запускать файлы.
Запрещено удалять, изменять, создавать файлы и папки.

В "Вариантах 2,3" папка блокируется полностью (в т.ч. нельзя войти в нее).

Совместимость:
Система: Windows Vista и выше.
Файловая система должна быть NTFS.

CMD/BATCH:
@set @x=0; /*
@echo off
if "%~2"=="" (cscript.exe //nologo //e:jscript "%~fs0" "%~1"& goto :eof)
cd /d "%~dp0"
if "%~1" neq "" goto CONTEXT

:HERE
Set "Cur=%~dp0"
Set "Cur=%Cur:~0,-1%"
takeown /f "%Cur%" /r /d y
icacls "%Cur%" /deny All:(DE,WDAC,WO,AS,WD,AD,WEA,DC,WA) /T /C
icacls "%Cur%" /deny ‚бҐ:(DE,WDAC,WO,WD,AS,AD,WEA,DC,WA) /T /C
icacls "%Cur%" /grant All:(RC,S,GR,GW,GE,RD,REA,X,RA) /T /C
icacls "%Cur%" /grant ‚бҐ:(RC,S,GR,GW,GE,RD,REA,X,RA) /T /C
goto :eof

:CONTEXT
if exist "%~1\" (goto CONTEXT_FOLDER) else (goto CONTEXT_FILE)
goto :eof

:CONTEXT_FOLDER
takeown /f "%~1" /r /d y
icacls "%~1" /deny All:F /T /C
icacls "%~1" /deny ‚бҐ:F /T /C
goto :eof

:CONTEXT_FILE
takeown /f "%~1"
icacls "%~1" /deny All:F /C
icacls "%~1" /deny ‚бҐ:F /C
goto :eof

*/new ActiveXObject('Shell.Application').ShellExecute ('cmd.exe', '/c ""' + WScript.ScriptFullName + '" "' + WScript.Arguments(0) +'" "runas""','','runas',1);
CMD/BATCH:
@set @x=0; /*
@echo off
if "%~2"=="" (cscript.exe //nologo //e:jscript "%~fs0" "%~1"& goto :eof)
cd /d "%~dp0"
if "%~1" neq "" goto CONTEXT

:HERE
Set "Cur=%~dp0"
Set "Cur=%Cur:~0,-1%"
takeown /f "%Cur%" /r /d y
icacls "%Cur%" /grant All:f /T /C
icacls "%Cur%" /grant Все:f /T /C
goto :eof

:CONTEXT
if exist "%~1\" (goto CONTEXT_FOLDER) else (goto CONTEXT_FILE)
goto :eof

:CONTEXT_FOLDER
takeown /f "%~1" /r /d y
icacls "%~1" /grant All:f /T /C
icacls "%~1" /grant Все:f /T /C
goto :eof

:CONTEXT_FILE
takeown /f "%~1"
icacls "%~1" /grant All:f /C
icacls "%~1" /grant Все:f /C
goto :eof

*/new ActiveXObject('Shell.Application').ShellExecute ('cmd.exe', '/c ""' + WScript.ScriptFullName + '" "' + WScript.Arguments(0) +'" "runas""','','runas',1);
 

Вложения

Последнее редактирование модератором:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Отбор уникальных файлов при сравнении двух папок и копирование их отдельно с сохранением структуры каталогов.

Задача: Вам нужно сравнить имена файлов в двух каталогах.
Файлы, которые есть в 1-м, но нет во 2-м, скопировать отдельно с соблюдением их расположения по подпапкам.

Использование: перетянуть 2 папки на батник.

Демо:
uniq.png

Берём батник Get_Uniq.cmd, выделяем две папки и перетаскиваем их на батник.

uniq_3.png

Вводим номер папки, из которой нужно извлечь уникальные файлы:

uniq_4.png

В результате получаем новый подкаталог Uniq с файлами, которые были внутри папки Inf, но не было внутри папки Inf_Bad:

uniq_2.png
 

Вложения

Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Поиск альтернативных файловых потоков, которые занимают слишком много места на диске

Как известно, большинство программ оценки свободного места (вроде WinDirStat) не показывают объем, занимаемый альтернативными файловыми потоками.
Этот скрипт призван заполнить такой недостаток.

По-умолчанию сканируется только системный диск.
В отчёт попадут файли и папки, чьи ADS занимают более 1000 байт. Можете изменить этот лимит в переменной MAX_STREAM_SIZE.

Совместимость: Windows Vista и выше.

CMD/BATCH:
@echo off
SetLocal EnableExtensions

set "MAX_STREAM_SIZE=1000"

cd /d "%~dp0"
2>nul del ADS.log
echo _______________________________
echo  ADS scaner by Alex Dragokas
title ADS scaner by Alex Dragokas
echo _______________________________
echo.
echo Scanning disk %SystemDrive% ...
echo Please, wait.
echo.

net session >NUL 2>NUL || (
  echo Запустите утилиту от имени Администратора !!!
  echo You need to launch this app. as Admin !!!
  pause>nul & goto :eof
)
:: for pseudo progress-bar purposes

set Drive=%SystemDrive%

call :ScanFolder %Drive%

:: 1 level
for /f "delims=" %%a in ('dir /b /ad-l "%Drive%\*"') do (

  call :ScanFolder "%Drive%\%%a"

  rem 2 level
  for /f "delims=" %%b in ('dir /b /ad-l "%Drive%\%%a\*"') do (

    rem Start recursive scanning on 2 level
    call :ScanFolder "%Drive%\%%a\%%b" /s
  )
)

del t.log t2.log
explorer ADS.log
pause
goto :eof

:ScanFolder [Path] [/s for recursive]

echo "%~1"
dir /r /a-l /-c %~2 "%~1\*" > t.log
echo Parsing ...
< t.log > t2.log findstr /r /c:":.*:" /c:"Содержимое папки" /c:"Directory of"

for /f "tokens=1-2*" %%a in (t2.log) do (

  if "%%a %%b"=="Содержимое папки" (
    set "Folder=%%c"
  ) else (
  if "%%a %%b"=="Directory of" (
    set "Folder=%%c"
  ) else (
  if %%a GTR %MAX_STREAM_SIZE% call :Log "%%a" "%%b %%c"
  ))
)
exit /b

:Log
echo %~1 "%Folder%\%~2" >> ADS.log
exit /b
Батник обязательно сохранять в кодировке OEM-866.
 

Вложения

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
Узнаём, сколько места занимают служебные файлы NTFS, невидимые в проводнике / и других файловых менеджерах.

Скрипт позволяет узнать объем файлов:
  • $Mft
  • $LogFile
  • $Volume
  • $AttrDef
  • $Bitmap
  • $Boot
  • $BadClus
  • $Secure
  • $UpCase
  • $Extend
Используется программа SysInternals Contig.

Использование:
распаковать, запустить батник Get_NTFS_Space.cmd от имени Администратора, получить отчет в файле $NTFS.log

Отчёт получается в такой форме:
Processing C:\$Mft:
File size: 507248640 bytes
Processing C:\$Mft::$BITMAP:
File size: 61920 bytes
Processing C:\$Volume:
File size: 1859720839167 bytes
Processing C:\$AttrDef:
File size: 2560 bytes
Processing C:\$Secure::$ATTRIBUTE_LIST:
File size: 384 bytes
Processing C:\$Secure:$SDS:$DATA:
File size: 3604844 bytes
Processing C:\$Secure:$SDH:$INDEX_ALLOCATION:
File size: 393216 bytes
Processing C:\$Secure:$SII:$INDEX_ALLOCATION:
File size: 524288 bytes
Processing C:\$UpCase:
File size: 131072 bytes
Processing C:\$Extend:
File size: 0 bytes
 

Вложения

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
SecureInput
(вывод на экран звёздочек во время ввода пароля)


Это модифицированная мною версия (оригинальный автор greg zakharov)
Добавлена возможность ввода знака ! и вывод на экран звёздочек.
CMD/BATCH:
@echo off
SetLocal EnableExtensions

call :secureinput_v2 "Enter password: " var
echo "var=%var%"

pause
goto :eof

:secureinput_v2
  SetLocal EnableExtensions
  set "v="
  <NUL set /p"=%~1"
  for /f %%i in ('"prompt;$H&for %%i in (1) do rem"') do set "$=%%i"
  :repeat
    set "c="& set "d="
    for /f "delims=" %%i in ('2^>nul xcopy /l /w "%~f0" "%~f0"') do if not defined c (set "c=%%i" &<NUL set /p=*)
    set "c=%c:~-1%"
    if not defined c (EndLocal & set "%~2=%v%" & echo.& exit /b)
    SetLocal EnableDelayedExpansion
    if !$! equ !c! (set d=1& if defined v (<nul set /p "=!$!!$!  !$!!$!") else (<nul set /p "=!$! !$!"))
    EndLocal & set "d=%d%"
    if defined d (
      set "c="& if defined v set "v=%v:~0,-1%"
    ) else (
      if not defined v (set "v=%c%") else for /f delims^=^ eol^= %%i in ("%v%") do set "v=%%i%c%"
    )
  goto repeat
exit /b
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,140
Реакции
5,913
Баллы
648
BZ2-архивы: упаковка, распаковка, тест целостности

Популярно на source-серверах.

Скрипт 1) Упаковка всех файлов в .bz2 для отгрузки на контент-сервер

Целесообразность: упакованные архивы занимают меньше места для передачи по интернет-каналу клиенту,
кроме того могут быть проверены на целостность.

Скрипт 2) Проверка целостности .bz2

Целесообразность: иногда файлы портятся при передаче хостеру. Для обеспечения надёжности,
оптимальный вариант: отгрузка архивов, загрузка их обратно и сверка КС этим скриптом.

Скрипт 3) Распаковка .bz2

ПОДГОТОВКА СКРИПТОВ
1. Скачать скрипт
2. Скачать bzip2.exe + bzip2.dll (например, из: Bzip2 for Windows) и расположить рядом с .cmd скриптом.

ИСПОЛЬЗОВАНИE.
A. Script "bz2_compress.cmd"

Вариант 1. Перетащить папку на этот скрипт (или создать ярлык для него и перетащить папку на ярлык).
Вариант 2. Запустить скрипт и он упакует все подкаталоги.
Вариант 3. Перетащить файл на скрипт.

ВНИМАНИЕ. Все файлы после упаковки будут удалены (в вариантах 1,2 ).

B. Script "test_arc.cmd"

Вариант 1. Перетащить папку на него.
Вариант 2. Запустить скрипт внутри папки, где вы хотите проверить целостность всех .bz2.

C. Script "bz2_unpack.cmd"

Перетащить папку на скрипт.
Все оригинальные bz2 будут удалены.
 

Вложения

Последнее редактирование:
Сверху Снизу