2014-08-31 2 views
0

Я использую команды командного файла, чтобы удалить временные файлы в системе. Команда работает нормально.проверить наличие папки и удалить временные файлы

Этот код работает нормально, но есть недостаток:

FOR /D %%p IN ("C:\Temp\*.*") DO rmdir "%%p" /s /q 

cd c:\temp 
del /F /s /q *.* >c:\DelTempLog.txt 
rd /s /q %systemdrive%\$Recycle.bin >c:\DelTempLog.txt 

FOR /D %%p IN ("C:\Windows\Installer\$PatchCache$\*.*") DO rmdir "%%p" /s /q 

cd C:\Windows\Installer\$PatchCache$ 
del /F /s /q *.* >c:\DelTempLog.txt 

FOR /D %%p IN ("C:\Windows\Temp*.*") DO rmdir "%%p" /s /q 

cd C:\Windows\Temp 
del /F /s /q *.* >c:\DelTempLog.txt 
del /q /s %tmp% >c:\DelTempLog.txt 

Сегодня я столкнулся с исключение где c:\temp папка не существует на сервере.

Он удалил половину файлов под c:\windows\system32.

  1. Я хочу добавить IF команду после изменения DIR перед удалением ничего.

  2. Также, пожалуйста, сообщите мне, как это сделать регистрация деятельность в лучшем виде.

ответ

0
@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "logFile=c:\deltemplog.txt" 

    (for %%a in (
     "c:\temp" "c:\windows\temp" "%temp%" 
     "%systemdrive%\$Recycle.bin" "C:\Windows\Installer\$PatchCache$" 
    ) do if not exist "%%~a\" (
     echo [ ERROR ]: "%%~a" does not exist 
    ) else pushd "%%~a" && (
      echo [ pushd ]: changed to "%%~a" 
      echo rmdir . /s /q 
      popd 
     ) || (
      echo [ ERROR ]: Failed to change to "%%~a" 
     ) 
    ) > "%logFile%" 

Для каждой папки в списке, изменения к нему, и если команда не преминула, удалите текущую папку (это приведет к удалению контента, а не папка, так как она является текущим) ,

Команды rmdir только эхо. Если выход (в лог-файл) является правильным, удалите echo команду, префиксы rmdir

0

Как насчет, прежде чем ваша партия-а-это стендами, вы пытаетесь

md c:\temp 2>nul 
if not exist c:\temp\. echo No c:\temp!&goto :eof 
1

На элементарном уровне, если вы указываете полный путь в командной строке, тогда он не может удалять файлы из другого места.

del /F /s /q "c:\temp\*.*?" 

Также не нужно менять каталог перед выдачей команды.

? подавляет приглашение, запрашивающее у вас, что вы хотите удалить все файлы.

0

Я предпочитаю использовать %CD% встроенное значение, затем попытайтесь переместить в папку и посмотреть, если он работал, как:

set CURDIR=%CD% 
pushd C:\Temp 
if '%CD%'=='%CURDIR%' (
    echo Failed to move to C:\Temp 
) else ( 
    [code to do your deletions] 
) 
popd 

Я предпочитаю, чтобы толкать и поп-каталог, а не hard CD, просто потому, что тогда вы всегда можете вернуться туда, где вы были, не зная, где это.

Смежные вопросы