«

»

Sep 19

Bat-ники для мелочей

Не, ну линуксы рулят конечно и все такое. Однако многие частенько недооценивают неказистую “мощь” батников. А, меж тем, в умелых руках он вполне себе позволяет автоматизировать большую часть всякой рутины. В данном статье будут лежать windows bat-скрипты для разных задач.

Как подсчитать число строк в файле bat-скрипт:

:: count number of lines in file as 1st parameters
Find /V /C "" < C:\tst.txt

полный батник для подсчета строк:

@echo off
if "%1" == "" goto usage
for /f %%a in ('find /V /C "" ^< %1') do set Num_Line=%%a
echo at file %1 %Num_Line% lines
goto end
:usage
echo ERROR: Give me file name to count lines in!
echo        usage line_counter.bat file_name.txt
:end

объяснения тут
http://social.technet.microsoft.com/Forums/en-US/ITCG/thread/1867323d-e6c7-440f-83a4-2bdc9b4432d5

Как удалить все папки svn из проекта (да, все-все, и вложенные тоже):

:: clean all project from .svn subfolders
for /f "tokens=* delims=" %%i in ('dir /s /b /a:d *.svn') do (
rd /s /q "%%i"
)

Как вывести список всех файлов в папке и всех подпапках:

dir /B /A /S &gt; file_listing.txt

Пример установочного скрипта (когда с нсисом и иже с ними заморачиваться чрезмерно)
тут есть снипеты для
– проверка какая версия JRE установлена
– проверка наличия/существования файла по указанному пути
– извлечение файлов из архивов 7z/zip
– копирование файлов (dll библиотеки и jar-файла) в папки bin и lib JRE
– поиск файла по маске в указанной папке на примере архива java библиотеки для логирования

:: sample installation script
@echo off
echo Determine JRE installation...
FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment" /v CurrentVersion') DO set jre_version=%%B
FOR /F "skip=2 tokens=2*" %%A IN ('REG QUERY "HKLM\Software\JavaSoft\Java Runtime Environment\%jre_version%" /v JavaHome') DO set jre_full_path=%%B
echo Ok.
::IF DEFINED jre_full_path (
::ECHO JRE version - %jre_version%, JRE path - %jre_full_path%
::)
IF NOT DEFINED jre_full_path (
echo Can't locate JRE location. You should install JRE first and execute this script again!
pause
exit
)
echo determine 7z installatin...
set zip_exec="c:\Program Files\7-Zip\7z.exe"
if NOT exist %zip_exec% (
echo Can't locate 7z executable %zip_exec%
echo You need it to extract data from archive
echo install it and run this script again
pause
exit
)
echo Ok.

:: check package integrity and unpack them

set apach_log_arch=%CD%\apache-log4j-1.2.16.zip
if NOT exist %apach_log_arch% (
echo integrity check failed - copy in current folder archive with apache log library:
echo %apach_log_arch% not exist, can't continue deployment
pause
exit
)

echo extracting %apach_log_arch%...
%zip_exec% x -y %apach_log_arch%>NUL
set apach_log_path=%CD%\apache-log4j-1.2.16\
echo Ok

:: start copy files
set JRE_BIN=%jre_full_path%\bin
set JRE_LIB=%jre_full_path%\lib\ext


for /f "tokens=*" %%f in ('dir /B /S %apach_log_path%\*NTEventLogAppender.dll') do (
set apach_log_dll=%%f
)

for /f "tokens=*" %%f in ('dir /B /S %apach_log_path%\*log4j-1.2.16.jar') do (
set apach_log_jar=%%f
)

if not defined apach_log_dll (
echo Can't find NTEventLogAppender.dll in %apach_log_path% exiting
pause
exit
)

if not defined apach_log_jar (
echo Can't find log4j-1.2.16.jar in %apach_log_path% exiting
pause
exit
)

echo Copy files...
if defined apach_log_dll xcopy %apach_log_dll% "%JRE_BIN%" /S /Y>NUL
if defined apach_log_jar xcopy "%apach_log_jar%" "%JRE_LIB%" /S /Y>NUL
:: add your own
echo Ok

echo Delete temporary files...
rmdir /s /q "%apach_log_path%"
echo Ok

echo Congratulations - all dependencies are installed

pause

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>