BAT zmieniający nazwę najmniejszego pliku w folderze

0

Hej !
Mam prośbę - mam np w folderze c:/txt różne pliki txt - są one wielkości od 0 (zera) kb do kilku mb.
I teraz chciałbym aby BAT wybrał najmniejszy plik txt, ALE o wielkości minimum 1kb i zmienił jego nazwę na np. abc.txt
Jeśli w folderze znajduje się kilka plików o takiej samej najmniejszej wielkości to BAT może wybrać pierwszy z rzędu i zmienić nazwę, a resztę pominąć, albo zmienić po kolei nazwy każdego na abc2.txt abc3.txt itd
Będę bardzo wdzięczny za pomoc.

0

nie musi być BAT - może być c++ itp

0

za małą posiadam wiedzę ...

1

poprawione dla plików zawierających spację:

@Echo off
set najmniejszy_plik=
set najmniejszy_rozmiar=99999999999999
for %%i IN (*.txt) DO call :sprawdz_rozmiar "%%i"

if "%najmniejszy_plik%"=="" goto nie_znaleziono

echo Najmniejszy plik: %najmniejszy_plik% (%najmniejszy_rozmiar% bajtow)
ren "%najmniejszy_plik%" abc.txt
goto end

:sprawdz_rozmiar
set rozmiar=%~z1

rem Nie mniejszy niz 1kB
if /I %rozmiar% LSS 1024 goto end

if /I %rozmiar% LSS %najmniejszy_rozmiar% (
	set najmniejszy_rozmiar=%rozmiar%
	set najmniejszy_plik=%~1
)
goto end

:nie_znaleziono
echo Nie znaleziono pliku

:end

mógłby ktoś usunąć poprzedni wpis

0

dzięki - ale jak ustawić aby program sprawdzał pliki w folderze c:\txt i tam je zapisywał ?

1

po prostu zapisz ten plik w tym folderze, albo na początku skryptu ustaw "cd /d c:\txt", albo dopisz ścieżkę w linii z for

0

No i cholera mam problem - gdy chcę uruchomić plik txt.bat który jest w katalogu txt innym plikiem bat - przez komendę call to zawsze wyskakuje mi: "w tym momencie 1024 było nieoczekiwane".
Gdy w pliku dodam ścieżkę na początku lub w lini z for to wyskakuje ten sam komunikat...

Działa tylko wtedy jeśli dam w innym pliku bat

cd c:\txt 
call txt.bat
cd..

ALE, później mam w tym pliku bat komendę:

@SetRecurcex5 long.txt short.txt wynik.txt

i ta komenda już nie działa - tak jakby nie widział już pliku SetRecurcex5.exe

dodanie znaczników <code class="winbatch"> - furious programming

0

Zamiast

cd..

daj

cd katalog_z_plikiem_SetResourcex5.exe
0

SetResourcex5.exe jest na c: więc próbowałem wcześniej tak robić czyli wstawiłem
cd c:\
ale jest to samo - dodałem prostą komendę
copy
i normalnie wyskakuje w oknie:

copy c:\txt\1.txt c:\2.txt
Liczba skopiowanych plików 1

a jak wstawię etap z cd to już nie piszę co kopiuje tylko samo : Liczba skopiowanych plików 1

0

możesz skorzystać ze stosu zapamiętującego aktualny katalog

pushd - przechodzi do katalogu i zapamiętuje poprzedni
popd - wraca do poprzedniego folderu

wystarczy żeby na początku skryptu napisać:

pushd "%~dp0"

a na końcu

popd

żeby odpalić skrypt zawsze w folderze gdzie znajduje się skrypt

0

ale chyba nie dawać tego w txt.bat ? bo wtedy wyłącza mi się plik test.bat w którym mam call C:\txt\txt.bat

0

no w tym skrypcie o którym cały czas piszemy
czemu coś się ma wyłączyć?

0

dobra wreszcie działa :)
dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1