2016-02-09 3 views
0

У меня есть много папок, и мне нужно удалить из любой папки самые старые файлы в нем, количество файлов, которые мне нужно удалить, изменило любую итерацию, поэтому я попытался сделать цикл for, который на любой итерации делает сортировку даты после самый старый файл в верхней части файла, я делаю «skip = variable», эта переменная меняет любую итерацию, и это не работает.Как пропустить количество строк, которые изменились во время выполнения в cmd?

Есть ли у кого-нибудь идеи, как его решить в пакетном файле? Спасибо!

+0

Нам потребуется немного кода, чтобы помочь вам. Спасибо – acostela

+0

Итак, вы добавляете «skip = variable» в файлы, которые хотите пропустить, и они не пропускают их? Это проблема? – Neil

+0

FOR/F "tokens = 1,2 delims =" %% i in (C: \ folder \ varibales_file.txt) do (установить numOfFiles = %% j & pushd %% i & (для/f "skip = numOfFiles" %% F in ('dir C: \ folder_path_to_delete \ %% i/b/o-d') do (rd/s/q C: \ folder_path_to_delete \ %% i \ %% F)) & popd) – Reutm

ответ

1

В опции for /F команды ("skip... delims... tokens", и т.д.) может не быть изменена после того, как команда for /F была проанализирована. Вы должны изменить значение "skip=!numOfFiles!" в другой подпрограмме, поэтому команда for /F анализироваться каждый раз, когда она выполняется:

@echo off 
setlocal EnableDelayedExpansion 

FOR /F "tokens=1,2 delims= " %%i in (C:\folder\varibales_file.txt) do (
    set numOfFiles=%%j 
    pushd %%i 
    call :Sub !numOfFiles! 
    popd 
) 
goto :EOF 


:Sub numOfFiles 
for /f "skip=%1 delims=" %%F in ('dir "C:\folder_path_to_delete\%%i" /b /o-d') do (
    rd /s /q "C:\folder_path_to_delete\%%i\%%F" 
) 
+0

привет, спасибо за ваш ответ, я попробовал то, что вы сказали, но это не работает, я получил сообщение об ошибке:« Система по команде неверна » вот код: @echo от SETLOCAL EnableDelayedExpansion NET USE \\ Haifa-NAS \ build_results \ CleanupLogs \ reut_cleanup FOR/F "токенов = 1,2 delims =" %% я в (C: \ folder \ varibales_file.txt) do (set numOfBuild = %% j pushd %% i call: Sub! numOfBuild! POPD ) Гото: EOF : суб numOfBuild для/ф "перескочить =% 1 delims =" %% F в ('реж C: \ \ folder_path_to_delete %% I/B/о-г ') do (rd/s/q C: \ folder_path_to_delete \ %% i \ %% F) – Reutm

+0

Я отправил его в несколько строк, но он отображается как одна строка – Reutm

+0

Я боюсь, что не понимаю вас. .. Вы должны вставить мой код в .BAT-файл, а затем выполнить файл! – Aacini

0

я сделал следующие изменения в вашу «одной строки коду»:

  • переформатирование в надлежащий и читаемый командный файл

  • с использованием numOfOFiles как задержками переменной (вы сделали это в виде строки которые не могут работать)

  • заключены все пути/имена файлов в кавычках к правильной работе с пробелами в именах файлов direcotries

  • добавлено delims= по этой же причине
  • удалите ECHO, если выход удовлетворяет требованиям.

(corected только код, не проверить, если он делает то, что вы хотите)

@echo off 
setlocal enabledelayedexpansion 
FOR /F "tokens=1,2 delims= " %%i in (C:\folder\varibales_file.txt) do (
    set numOfFiles=%%j 
    pushd %%i 
    for /f "skip=!numOfFiles! delims=" %%F in ('dir "C:\folder_path_to_delete\%%i" /b /o-d') do (
    ECHO rd /s /q "C:\folder_path_to_delete\%%i\%%F" 
    popd 
) 

вы уверены, вы хотите использовать rd (Удалить каталог), не del (Удал.файла) ?

+0

Спасибо, я попробовал, и есть ошибка «Система не могу найти файл ... »хотя файл существует – Reutm