BAT zmieniający nazwę najmniejszego pliku w folderze

BAT zmieniający nazwę najmniejszego pliku w folderze
EN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
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.

EN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

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

EN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

za małą posiadam wiedzę ...

  • Rejestracja: dni
  • Ostatnio: dni
1

poprawione dla plików zawierających spację:

Kopiuj
@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

EN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

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

  • Rejestracja: dni
  • Ostatnio: dni
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

EN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
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

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

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

Kopiuj
@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

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Zamiast

Kopiuj
cd..

daj

Kopiuj
cd katalog_z_plikiem_SetResourcex5.exe
EN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
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:

Kopiuj
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

  • Rejestracja: dni
  • Ostatnio: dni
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

EN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
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

  • Rejestracja: dni
  • Ostatnio: dni
0

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

EN
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 26
0

dobra wreszcie działa :)
dzięki

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.