Всем привет
Я не спец в батчах, но скажем так "проперся" от них ) понятно, что могут далеко не все, но иногда некоторые вещи сделать во много раз быстрее батниками, нежели писать программки
может когда-нибудь переползу на перлы\питоны или хотябы vbs для этих целей, но пока - батники)
отсюда вопрос.. как полностью создать безопасный батник? который бы не удалил все на свете, запустившись вдруг из другой директории, из шедулера или вообще хз откуда..)
как предусмотреть ВСЕ? (да-да, параноя. но даже она нередко оказывается не лишней)
понимаю, что возможно данный вопрос поднимался на одном из 117 листов данного топика, но посмотреть все - просто нет сил.. если подобное уже было - не премините ткнуть в ту сторону..
пока - кому не лень - вот батничек небольшой..
есть тулза.. готовит ее к запуску (первый запуск особый), готовит для нее окружение и все такое прочее.
есть ли здесь потенциально уязвимые места? что-то может сработать не так, кроме самой тулзы?)
Код: @echo off
cls
set dest=%~dp0
IF "%1"=="/?" (echo -
echo read helpfile [readme.txt/readme.doc]
goto :EOF)
IF /I "%1"=="/r" (echo First run 1 >"%dest%\bin\my.cfg")
set outp="%dest%\ForU"
set mask=masskk
echo running from: %dest%
echo -
echo }START
if not defined dest (goto end-err)
:: first run
if not exist "%dest%\bin\my.cfg" (goto firstrun)
For /F "tokens=3" %%i in (%dest%\bin\my.cfg) do (
if %%i NEQ 0 (
:firstrun
echo First run 0 >"%dest%\bin\my.cfg"
call "%dest%\bin\my3.com" /command "open my:my@my"
echo }DONE
echo -
goto :EOF
)
goto start
)
if not defined %%i (
goto firstrun
)
:start
if not exist "%dest%\source" (mkdir "%dest%\source")
if not exist "%dest%\logs" (mkdir "%dest%\logs")
if exist %dest%\logs\winscp.log (del %dest%\logs\my.log)
echo CONNECTING
call %dest%\bin\my3.com /console /script=%dest%\bin\my.scr /log=%dest%\logs\my.log >%dest%logs\my.log
echo COPY
xcopy %dest%\source %dest%\filter /M/S/C/I/F/H/R/Y >%dest%\logs\xcopy.log
if not exist "%dest%\filter" (goto end)
echo RENAME
FOR /R %dest%\filter %%i in (*.*) do (
rename "%%i" "*.*.%mask%"
)
echo MOVE
xcopy %dest%\filter %outp% /M/S/C/I/F/H/R/Y
echo DROP
rd /s /q filter
:end
echo for
FOR /R %dest%\source %%i in (*.*) do (
if %%~zi NEQ 0 (
type nul>"%%i" >>clear.log
attrib -A "%%~fi"
)
)
echo }DONE
echo -
echo For more information you can see log-files in logs\:
echo xcopy.log
echo my.log
goto :EOF
:end-err
echo Current directory undefided! "o_O"
goto :EOF