Установка переменных среды из файла с помощью SET / P
SET /P SVNVERSION=<ver.tmp
Метод установки уровня ошибки на любое желаемое число:
CMD /C EXIT number
goto: eof pasteboard
Я добавляю «goto: eof» в конец моих скриптов в качестве удобного места для фрагментов кода. Таким образом, я могу быстро копировать / вставлять в эту область и из нее, без необходимости комментировать / раскомментировать.
goto :eof
:: code scraps
call this.bat
call that.bat
set TS=%DATE:~10%%DATE:~4,2%%DATE:~7,2%-%TIME:~0,2%%TIME:~3,2%%TIME:~6%%
for /R C:\temp\ %%G in (*.bak) DO del %%G
При передаче неизвестного количества параметров в пакетный файл, например, когда несколько файлов перетаскиваются в пакетный файл для его запуска, вы можете ссылаться на каждую переменную параметра по имени, например
TYPE %1
TYPE %2
TYPE %3
TYPE %4
TYPE %5
...etc
, но это становится очень запутанным, если вы хотите проверить, существует ли каждый параметр:
if [%1] NEQ [] (
TYPE %1
)
if [%2] NEQ [] (
TYPE %2
)
if [%3] NEQ [] (
TYPE %3
)
if [%4] NEQ [] (
TYPE %4
)
if [%5] NEQ [] (
TYPE %5
)
...etc
Кроме того, вы можете принять только ограниченное количество параметров с этим подходом.
Вместо этого попробуйте использовать команду SHIFT:
:loop
IF [%1] NEQ [] (
TYPE %1
) ELSE (
GOTO end
)
SHIFT
GOTO loop
:end
SHIFT сдвинет все параметры на один вниз, так что% 2 станет% 1, а% 3 станет% 2 и т. д.
НАЙТИ
как замену для grep.
Я с помощью find взломал себе небольшую "телефонную книгу". Очень полезно:
@echo off
:begin
set /p term=Enter query:
type phonebookfile.txt |find /i "%term%"
if %errorlevel% == 0 GOTO :choose
echo No entry found
set /p new_entry=Add new entry:
echo %new_entry% >> phonebookfile.txt
:choose
set /p action=(q)uit, (n)ew query or (e)dit? [q]
if "%action%"=="n" GOTO anfang
if "%action%"=="e" (
notepad phonebookfile.txt
goto :choose
)
Очень быстро и эффективно.
Извлечь случайные строки текста
@echo off
:: Get time (alas, it's only HH:MM xM
for /f %%a in ('time /t') do set zD1=%%a
:: Get last digit of MM
set zD2=%zD1:~4,1%
:: Seed the randomizer, if needed
if not defined zNUM1 set /a zNUM1=%zD2%
:: Get a kinda random number
set /a zNUM1=zNUM1 * 214013 + 2531011
set /a zNUM2=zNUM1 ^>^> 16 ^& 0x7fff
:: Pull off the first digit
:: (Last digit would be better, but it's late, and I'm tired)
set zIDX=%zNUM2:~0,1%
:: Map it down to 0-3
set /a zIDX=zIDX/3
:: Finally, we can set do some proper initialization
set /a zIIDX=0
set zLO=
set zLL=""
:: Step through each line in the file, looking for line zIDX
for /f "delims=@" %%a in (c:\lines.txt) do call :zoo %zIDX% %%a
:: If line zIDX wasn't found, we'll settle for zee LastLine
if "%zLO%"=="" set zLO=%zLL%
goto awdun
:: See if the current line is line zIDX
:zoo
:: Save string of all parms
set zALL=%*
:: Strip off the first parm (sure hope lines aren't longer than 254 chars)
set zWORDS=%zALL:~2,255%
:: Make this line zee LastLine
set zLL=%zWORDS%
:: If this is the line we're looking for, make it zee LineOut
if {%1}=={%zIIDX%} set zLO=%zWORDS%
:: Keep track of line numbers
set /a zIIDX=%zIIDX% + 1
goto :eof
:awdun
echo ==%zLO%==
:: Be socially responsible
set zALL=
set zD1=
set zD2=
set zIDX=
set zIIDX=
set zLL=
set zLO=
:: But don't mess with seed
::set zNUM1=
set zNUM2=
set zWORDS=