ZanZibArgh
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Всем привет Я не спец в батчах, но скажем так "проперся" от них ) понятно, что могут далеко не все, но иногда некоторые вещи сделать во много раз быстрее батниками, нежели писать программки может когда-нибудь переползу на перлы\питоны или хотябы 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 | |