Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Хочу все знать (http://forum.oszone.net/forumdisplay.php?f=23)
-   -   [решено] bat-файл работает... и он же не работает. В чем дело? (http://forum.oszone.net/showthread.php?t=135354)

truvo 21-03-2009 09:05 1070019

bat-файл работает... и он же не работает. В чем дело?
 
Есть bat-файл по очистке папок Temp ( в Windows и Local Setting), папки Temporary Internet Files и корзины.

Этот батник запускается всякий раз при загрузке системы, через HKCU\Software\Microsoft\Windows\CurrentVersion\Run и, как выяснилось, не срабатывает.

Но этот же батник, запущенный вручную - отрабатывает нормально, и все эти папки очищаются!

В чем дело?

Содержимое батника, если кому интересно, я приводил здесь: http://forum.oszone.net/post-784912-117.html Да, уточняю: жалобы на батник в том посте ничего общего не имеют с сегодняшними, не обращайте на них внимания: там шла речь о ручном запуске файла в разных версиях XP, русских, английских, а здесь речь идет об использовании конкретного дистрибутива.

Blast 21-03-2009 10:19 1070060

truvo, может его в логон-скрипте лучше использовать? Как вариант...

gora 21-03-2009 11:14 1070096

Цитата:

Цитата truvo
Этот батник запускается всякий раз при загрузке системы, через HKCU\Software\Microsoft\Windows\CurrentVersion\Run и, как выяснилось, не срабатывает. »

1 А он точно запускается? Может дело в пути указанном в ключе?
2 Антивирус (Касперский, например) его случаем не блокирует?

truvo 21-03-2009 20:03 1070542

Blast, я не знаю, как это делается.

gora, точно запускается, то есть появляется DOS-окно с надписью "Start...", которое тут же исчезает. Антивирус у меня только DrWeb, причем без установленного spider-а.

ShaddyR 22-03-2009 01:56 1070757

Цитата:

Цитата truvo
появляется DOS-окно с надписью "Start...", которое тут же исчезает »

ну так убери строку
Цитата:

@echo off
в конце добавь
pause
и изучай, что не получилось у скрипта..

truvo 22-03-2009 03:15 1070776

ShaddyR, всё сделал так. В процессе работы файла на экран вывелось всё его содержание без всяких намеков на то, что что-то не получилось. Но всё, что я предварительно накидал в вышеуказанные папки для эксперимента, так и осталось неудаленным. При запуске того же батника вручную, повторяю - всё из папок исчезает...

И вот еще какая интересная фишка: с ручным запуском батника. Удалил в корзину файл - образ диска Windows, размером 674 Мб. Запускаю батник. Этот файл из корзины не удаляется! Стираю ещё пару текстовых файлов с диска, они попадают в корзину, опять запускаю батник - эти файлы благополучно удаляются, а iso - по-прежнему в корзине! Это, конечно, к теме не относится, но какой-то любопытный глюк.

ShaddyR 22-03-2009 13:21 1070971

truvo, запустил скрипт у себя.. он не очистил ни \windows\temp, ни времянки интернет, ни корзину.
Вот лог скрипта:


C:\>setlocal

C:\>set "ds=Documents and Settings"

C:\>set "tf=Local Settings\Temp"

C:\>set "ti=Local Settings\Temporary Internet Files"

C:\>echo Start....
Start....

C:\>for %i in (Q W E R T Y U I P O S D F G H J K L Z X C V N M) do (if not C: == %i: call:clean %i )

C:\>(if not C: == Q: call:clean Q )

C:\>if exist Q:\Windows\Temp (
pushd Q:\Windows\Temp
call:delete
popd
)

C:\>if exist Q:\WinNT\Temp (
pushd Q:\WinNT\Temp
call:delete
popd
)

C:\>if exist Q:\Recycler (
pushd Q:\Recycler
call:delete
popd
)

C:\>if exist Q:\Recycled (
pushd Q:\Recycled
call:delete
popd
)

C:\>if exist "Q:\System Volume Information\*_restore*" (
pushd "Q:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "Q:\Documents and Settings" goto:eof

C:\>(if not C: == W: call:clean W )

C:\>if exist W:\Windows\Temp (
pushd W:\Windows\Temp
call:delete
popd
)

C:\>if exist W:\WinNT\Temp (
pushd W:\WinNT\Temp
call:delete
popd
)

C:\>if exist W:\Recycler (
pushd W:\Recycler
call:delete
popd
)

C:\>if exist W:\Recycled (
pushd W:\Recycled
call:delete
popd
)

C:\>if exist "W:\System Volume Information\*_restore*" (
pushd "W:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "W:\Documents and Settings" goto:eof

C:\>(if not C: == E: call:clean E )

C:\>if exist E:\Windows\Temp (
pushd E:\Windows\Temp
call:delete
popd
)

C:\>if exist E:\WinNT\Temp (
pushd E:\WinNT\Temp
call:delete
popd
)

C:\>if exist E:\Recycler (
pushd E:\Recycler
call:delete
popd
)

C:\>if exist E:\Recycled (
pushd E:\Recycled
call:delete
popd
)

C:\>if exist "E:\System Volume Information\*_restore*" (
pushd "E:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "E:\Documents and Settings" goto:eof

C:\>(if not C: == R: call:clean R )

C:\>if exist R:\Windows\Temp (
pushd R:\Windows\Temp
call:delete
popd
)

C:\>if exist R:\WinNT\Temp (
pushd R:\WinNT\Temp
call:delete
popd
)

C:\>if exist R:\Recycler (
pushd R:\Recycler
call:delete
popd
)

C:\>if exist R:\Recycled (
pushd R:\Recycled
call:delete
popd
)

C:\>if exist "R:\System Volume Information\*_restore*" (
pushd "R:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "R:\Documents and Settings" goto:eof

C:\>(if not C: == T: call:clean T )

C:\>if exist T:\Windows\Temp (
pushd T:\Windows\Temp
call:delete
popd
)

C:\>if exist T:\WinNT\Temp (
pushd T:\WinNT\Temp
call:delete
popd
)

C:\>if exist T:\Recycler (
pushd T:\Recycler
call:delete
popd
)

C:\>if exist T:\Recycled (
pushd T:\Recycled
call:delete
popd
)

C:\>if exist "T:\System Volume Information\*_restore*" (
pushd "T:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "T:\Documents and Settings" goto:eof

C:\>(if not C: == Y: call:clean Y )

C:\>if exist Y:\Windows\Temp (
pushd Y:\Windows\Temp
call:delete
popd
)

C:\>if exist Y:\WinNT\Temp (
pushd Y:\WinNT\Temp
call:delete
popd
)

C:\>if exist Y:\Recycler (
pushd Y:\Recycler
call:delete
popd
)

C:\>if exist Y:\Recycled (
pushd Y:\Recycled
call:delete
popd
)

C:\>if exist "Y:\System Volume Information\*_restore*" (
pushd "Y:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "Y:\Documents and Settings" goto:eof

C:\>(if not C: == U: call:clean U )

C:\>if exist U:\Windows\Temp (
pushd U:\Windows\Temp
call:delete
popd
)

C:\>if exist U:\WinNT\Temp (
pushd U:\WinNT\Temp
call:delete
popd
)

C:\>if exist U:\Recycler (
pushd U:\Recycler
call:delete
popd
)

C:\>if exist U:\Recycled (
pushd U:\Recycled
call:delete
popd
)

C:\>if exist "U:\System Volume Information\*_restore*" (
pushd "U:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "U:\Documents and Settings" goto:eof

C:\>(if not C: == I: call:clean I )

C:\>if exist I:\Windows\Temp (
pushd I:\Windows\Temp
call:delete
popd
)

C:\>if exist I:\WinNT\Temp (
pushd I:\WinNT\Temp
call:delete
popd
)

C:\>if exist I:\Recycler (
pushd I:\Recycler
call:delete
popd
)

C:\>if exist I:\Recycled (
pushd I:\Recycled
call:delete
popd
)

C:\>if exist "I:\System Volume Information\*_restore*" (
pushd "I:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "I:\Documents and Settings" goto:eof

C:\>(if not C: == P: call:clean P )

C:\>if exist P:\Windows\Temp (
pushd P:\Windows\Temp
call:delete
popd
)

C:\>if exist P:\WinNT\Temp (
pushd P:\WinNT\Temp
call:delete
popd
)

C:\>if exist P:\Recycler (
pushd P:\Recycler
call:delete
popd
)

C:\>if exist P:\Recycled (
pushd P:\Recycled
call:delete
popd
)

C:\>if exist "P:\System Volume Information\*_restore*" (
pushd "P:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "P:\Documents and Settings" goto:eof

C:\>(if not C: == O: call:clean O )

C:\>if exist O:\Windows\Temp (
pushd O:\Windows\Temp
call:delete
popd
)

C:\>if exist O:\WinNT\Temp (
pushd O:\WinNT\Temp
call:delete
popd
)

C:\>if exist O:\Recycler (
pushd O:\Recycler
call:delete
popd
)

C:\>if exist O:\Recycled (
pushd O:\Recycled
call:delete
popd
)

C:\>if exist "O:\System Volume Information\*_restore*" (
pushd "O:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "O:\Documents and Settings" goto:eof

C:\>(if not C: == S: call:clean S )

C:\>if exist S:\Windows\Temp (
pushd S:\Windows\Temp
call:delete
popd
)

C:\>if exist S:\WinNT\Temp (
pushd S:\WinNT\Temp
call:delete
popd
)

C:\>if exist S:\Recycler (
pushd S:\Recycler
call:delete
popd
)

C:\>if exist S:\Recycled (
pushd S:\Recycled
call:delete
popd
)

C:\>if exist "S:\System Volume Information\*_restore*" (
pushd "S:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "S:\Documents and Settings" goto:eof

C:\>(if not C: == D: call:clean D )

C:\>if exist D:\Windows\Temp (
pushd D:\Windows\Temp
call:delete
popd
)

C:\>if exist D:\WinNT\Temp (
pushd D:\WinNT\Temp
call:delete
popd
)

C:\>if exist D:\Recycler (
pushd D:\Recycler
call:delete
popd
)

D:\RECYCLER>del /q /a /f *.* 1>nul 2>&1

D:\RECYCLER>for /F "tokens=*" %i in ('dir /b /ad') do rd /s /q "%i" 1>nul 2>&1

C:\>if exist D:\Recycled (
pushd D:\Recycled
call:delete
popd
)

C:\>if exist "D:\System Volume Information\*_restore*" (
pushd "D:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "D:\Documents and Settings" goto:eof

C:\>(if not C: == F: call:clean F )

C:\>if exist F:\Windows\Temp (
pushd F:\Windows\Temp
call:delete
popd
)

C:\>if exist F:\WinNT\Temp (
pushd F:\WinNT\Temp
call:delete
popd
)

C:\>if exist F:\Recycler (
pushd F:\Recycler
call:delete
popd
)

F:\RECYCLER>del /q /a /f *.* 1>nul 2>&1

F:\RECYCLER>for /F "tokens=*" %i in ('dir /b /ad') do rd /s /q "%i" 1>nul 2>&1

C:\>if exist F:\Recycled (
pushd F:\Recycled
call:delete
popd
)

C:\>if exist "F:\System Volume Information\*_restore*" (
pushd "F:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "F:\Documents and Settings" goto:eof

C:\>(if not C: == G: call:clean G )

C:\>if exist G:\Windows\Temp (
pushd G:\Windows\Temp
call:delete
popd
)

C:\>if exist G:\WinNT\Temp (
pushd G:\WinNT\Temp
call:delete
popd
)

C:\>if exist G:\Recycler (
pushd G:\Recycler
call:delete
popd
)

G:\RECYCLER>del /q /a /f *.* 1>nul 2>&1

G:\RECYCLER>for /F "tokens=*" %i in ('dir /b /ad') do rd /s /q "%i" 1>nul 2>&1

C:\>if exist G:\Recycled (
pushd G:\Recycled
call:delete
popd
)

C:\>if exist "G:\System Volume Information\*_restore*" (
pushd "G:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "G:\Documents and Settings" goto:eof

C:\>(if not C: == H: call:clean H )

C:\>if exist H:\Windows\Temp (
pushd H:\Windows\Temp
call:delete
popd
)

C:\>if exist H:\WinNT\Temp (
pushd H:\WinNT\Temp
call:delete
popd
)

C:\>if exist H:\Recycler (
pushd H:\Recycler
call:delete
popd
)

C:\>if exist H:\Recycled (
pushd H:\Recycled
call:delete
popd
)

C:\>if exist "H:\System Volume Information\*_restore*" (
pushd "H:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "H:\Documents and Settings" goto:eof

C:\>(if not C: == J: call:clean J )

C:\>if exist J:\Windows\Temp (
pushd J:\Windows\Temp
call:delete
popd
)

C:\>if exist J:\WinNT\Temp (
pushd J:\WinNT\Temp
call:delete
popd
)

C:\>if exist J:\Recycler (
pushd J:\Recycler
call:delete
popd
)

C:\>if exist J:\Recycled (
pushd J:\Recycled
call:delete
popd
)

C:\>if exist "J:\System Volume Information\*_restore*" (
pushd "J:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "J:\Documents and Settings" goto:eof

C:\>(if not C: == K: call:clean K )

C:\>if exist K:\Windows\Temp (
pushd K:\Windows\Temp
call:delete
popd
)

C:\>if exist K:\WinNT\Temp (
pushd K:\WinNT\Temp
call:delete
popd
)

C:\>if exist K:\Recycler (
pushd K:\Recycler
call:delete
popd
)

C:\>if exist K:\Recycled (
pushd K:\Recycled
call:delete
popd
)

C:\>if exist "K:\System Volume Information\*_restore*" (
pushd "K:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "K:\Documents and Settings" goto:eof

C:\>(if not C: == L: call:clean L )

C:\>if exist L:\Windows\Temp (
pushd L:\Windows\Temp
call:delete
popd
)

C:\>if exist L:\WinNT\Temp (
pushd L:\WinNT\Temp
call:delete
popd
)

C:\>if exist L:\Recycler (
pushd L:\Recycler
call:delete
popd
)

C:\>if exist L:\Recycled (
pushd L:\Recycled
call:delete
popd
)

C:\>if exist "L:\System Volume Information\*_restore*" (
pushd "L:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "L:\Documents and Settings" goto:eof

C:\>(if not C: == Z: call:clean Z )

C:\>if exist Z:\Windows\Temp (
pushd Z:\Windows\Temp
call:delete
popd
)

C:\>if exist Z:\WinNT\Temp (
pushd Z:\WinNT\Temp
call:delete
popd
)

C:\>if exist Z:\Recycler (
pushd Z:\Recycler
call:delete
popd
)

C:\>if exist Z:\Recycled (
pushd Z:\Recycled
call:delete
popd
)

C:\>if exist "Z:\System Volume Information\*_restore*" (
pushd "Z:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "Z:\Documents and Settings" goto:eof

C:\>(if not C: == X: call:clean X )

C:\>if exist X:\Windows\Temp (
pushd X:\Windows\Temp
call:delete
popd
)

C:\>if exist X:\WinNT\Temp (
pushd X:\WinNT\Temp
call:delete
popd
)

C:\>if exist X:\Recycler (
pushd X:\Recycler
call:delete
popd
)

C:\>if exist X:\Recycled (
pushd X:\Recycled
call:delete
popd
)

C:\>if exist "X:\System Volume Information\*_restore*" (
pushd "X:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "X:\Documents and Settings" goto:eof

C:\>(if not C: == C: call:clean C )

C:\>(if not C: == V: call:clean V )

C:\>if exist V:\Windows\Temp (
pushd V:\Windows\Temp
call:delete
popd
)

C:\>if exist V:\WinNT\Temp (
pushd V:\WinNT\Temp
call:delete
popd
)

C:\>if exist V:\Recycler (
pushd V:\Recycler
call:delete
popd
)

C:\>if exist V:\Recycled (
pushd V:\Recycled
call:delete
popd
)

C:\>if exist "V:\System Volume Information\*_restore*" (
pushd "V:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "V:\Documents and Settings" goto:eof

C:\>(if not C: == N: call:clean N )

C:\>if exist N:\Windows\Temp (
pushd N:\Windows\Temp
call:delete
popd
)

C:\>if exist N:\WinNT\Temp (
pushd N:\WinNT\Temp
call:delete
popd
)

C:\>if exist N:\Recycler (
pushd N:\Recycler
call:delete
popd
)

C:\>if exist N:\Recycled (
pushd N:\Recycled
call:delete
popd
)

C:\>if exist "N:\System Volume Information\*_restore*" (
pushd "N:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "N:\Documents and Settings" goto:eof

C:\>(if not C: == M: call:clean M )

C:\>if exist M:\Windows\Temp (
pushd M:\Windows\Temp
call:delete
popd
)

C:\>if exist M:\WinNT\Temp (
pushd M:\WinNT\Temp
call:delete
popd
)

C:\>if exist M:\Recycler (
pushd M:\Recycler
call:delete
popd
)

C:\>if exist M:\Recycled (
pushd M:\Recycled
call:delete
popd
)

C:\>if exist "M:\System Volume Information\*_restore*" (
pushd "M:\System Volume Information\*_restore*"
for /F %i in ('dir /b /ad') do rd /s /q %i
popd
)

C:\>if not exist "M:\Documents and Settings" goto:eof

C:\>echo ....Done
....Done

C:\>goto:eof

Не сработал, судя по всему, из-за срабатывания условия
C:\>(if not C: == C: call:clean C )
то бишь, он диск С: проигнорировал.. Вероятно, предполагается, что скрипт запустился с незаписываемого носителя, времянки которого очистить не выйдет... только вот выходит неувязочка.

truvo 22-03-2009 15:18 1071030

ShaddyR, видимо, так... он пропускает диск, на котором находится. Я-то запускал вручную с диска D, а в автозапуске - с диска C... Надо как-то править текст.

truvo 25-03-2009 17:15 1074516

Мне подсказали решение, делюсь:
Вместо строчки "if not %~d0==%%i: call:clean %%i" надо поставить "call:clean %%i"
При этом будут обрабатываться все диски, включая тот, с которого запущен батник.

ShaddyR 25-03-2009 20:21 1074707

Цитата:

Цитата truvo
Вместо строчки "if not %~d0==%%i: call:clean %%i" надо поставить "call:clean %%i"
При этом будут обрабатываться все диски, включая тот, с которого запущен батник. »

ессно.
Только при этом сложно сказать, как поведет себя скрипт при попытке изменить содержимое компакт-диска, если с такового его запустили. ИМХО, truvo, в твоем случае нужно уйти от универсальности, а придерживаться локальных условий. Т.е. тебе для очистки твоих времянок не нужно выяснять имена пользователей, букву диска етс. - ты их и так знаешь. Вот исходя из этого и адаптировать скрипт.. а лучше - заменить на более простой.

truvo 26-03-2009 02:36 1074952

Цитата:

Цитата ShaddyR
в твоем случае нужно уйти от универсальности »

Как раз нет, наоборот. Мне нужна полная универсальность не только по отношению к возможным учеткам и возможным разделам установки системы, мне нужна еще универсальность по отношению к версиям Windows - и вот там-то, на других виндах, батник тоже не всегда корректно отрабатывал, там другие имена папок могут быть, что ли - не знаю... Почему я и предлагал в другой теме, на которую ссылаюсь, спецам покумекать над этим файлом.

А простых я штук шесть самых разных подбирал в сети, но все они вообще мышей не ловили... Этот батник по сравнению с ними - просто мечта!


Время: 20:15.

Время: 20:15.
© OSzone.net 2001-