Войти

Показать полную графическую версию : Логирование действия


kosmo
16-03-2010, 10:12
Автоматизация чистки папки от одинаковых архивов. Ведется логирование.


setlocal enableextensions enabledelayedexpansion
set OUTPUT=logFile.txt

if "%STDOUT_REDIRECTED%" == "" (
set STDOUT_REDIRECTED=yes
cmd.exe /c %0 %* >>%OUTPUT%
exit /b %ERRORLEVEL%
)

pushd "%KudaArhiv%"

set sMaskFileArh="*.rar"
for /f "delims=" %%i in ('dir %sMaskFileArh% /b /a^:-d /o^-d') do (
if exist "%%i" (
set /a tekKol=!tekKol! + 1
set sParam="skip=!tekKol! delims="
call :MetkaCikl2 "%%i" !sParam! %sMaskFileArh%
)
)
popd
endlocal
exit /b 0


:MetkaCikl2
setlocal enableextensions enabledelayedexpansion
for /f %2 %%j in ('dir %3 /b /a^:-d /o^-d') do (
if "%%j" NEQ %1 (echo N|comp.exe %1 "%%j" 1>nul 2>nul && echo _совпадающие файлы %1 был удален=> "%%j" && del /f /q "%%j")
)
endlocal
exit /b 0


Вопрос 1.
Почему при коде

set sMaskFileArh="c:\arhiv\*.rar"
for /f "delims=" %%i in ('dir %sMaskFileArh% /b /a^:-d /o^-d') do (echo %%~fi)
в результате получается полный путь аналогичный %CD%\%%i вместо c:\arhiv\%%i

Вопрос 2.
Каким образом включить в лог строку echo _совпадающие файлы %1 был удален=> "%%j"
которая, как я понимаю, была выключена посредством предыдущей команды 1>nul

kosmo
16-03-2010, 12:04
Вопрос 2 отпал путем удаления символа ">"
то есть вместо
echo _совпадающие файлы %1 был удален=> "%%j"
нужно
echo _совпадающие файлы %1 был удален "%%j"

kosmo
24-03-2010, 16:23
по второму вопросу рекомендуют добавить /s
то есть должно быть

set sMaskFileArh="c:\arhiv\*.rar"
for /f "delims=" %%i in ('dir %sMaskFileArh% /s /b /a^:-d /o^-d') do (echo %%~fi)

либо использовать pushd и popd
set sMaskFileArh=*.rar
set sPath=c:\arhiv
pushd %sPath%
for /f "delims=" %%i in ('dir "%sMaskFileArh%" /b /a^:-d /o^-d') do (echo %%~fi)
popd




© OSzone.net 2001-2012