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.
nie musi być BAT - może być c++ itp
za małą posiadam wiedzę ...
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
dzięki - ale jak ustawić aby program sprawdzał pliki w folderze c:\txt i tam je zapisywał ?
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
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
Zamiast
cd..
daj
cd katalog_z_plikiem_SetResourcex5.exe
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
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
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
no w tym skrypcie o którym cały czas piszemy
czemu coś się ma wyłączyć?
dobra wreszcie działa :)
dzięki