Potrzebna mała pomoc w CMD

Witam forumowiczów.

Potrzebuję napisać mały skrypt, który m.in. będzie sprawdzał czy plik ma wielkość zero i w takim przypadku będzie go kasował.

Na razie mam coś takiego:
if “%~z1.log” equ 0 del “%~1.log”

Niestety zamiast sprawdzić wielkość pliku z rozszerzeniem .log, porównuje wielkość pliku wprost ze zmiennej. Czy ktoś wie jak to ugryźć?

Potrolluję:

    powershell -command "gci | % { if ( $_.Length -eq 0 ) { Remove-Item $_ } }"

:stuck_out_tongue:

1lajk

Wolę to jednak zrobić w CMD… :slight_smile:

for /r %F in (*.log) do @if %~zF==0 del "%F"

Może inaczej, cały skrypt sprawdza czy nie ma błędów w plikach multimedialnych (w tym przypadku mp3) i wygląda tak:

set “filtr=*.mp3”
for /R %%a in (%filtr%) do call :doWork “%%a”
PAUSE
exit /B
:doWork
C:\ffmpeg\ffmpeg.exe -v error -i %1 -f null - > “%~1.log” 2>&1
if “%~z1.log” equ 0 del “%~1.log”

Chodzi mi tylko o ostatni wiersz. Jeśli w pliku nie ma błędu, tworzy się plik .log o wielkości 0
i chciałbym aby od razu został usunięty. Pozostałe większe od 0 mają zostać.

Get-ChildItem -Recurse -Filter *.mp3 | Foreach-Object { `
  $fn = $_.BaseName + ".log"
  Start-Process -FilePath "C:\ffmpeg\ffmpeg.exe" -ArgumentList `
  (" -v error -i " + $_.FullName  + " -f null" ) -NoNewWindow -PassThru -Wait `
  -RedirectStandardOutput $fn ;
  $fo = Get-Item $fn
  if ( $fo.Length -eq 0 )
  { Remove-Item $fo } }

Dziękuję za zainteresowanie tematem :slight_smile:
To jest w powershell? Wrzuciłem do pliku .cmd ale tak chyba nie zadziała…

To jest PowerShell. Jest czytelniejszy po prostu.
Natomiast w cmd, jeżeli uzywasz zmiennych w *.cmd, a nie interaktywnie, musisz podwoić procenty. O tak:

for %%f in (*.log) do if %%~zf==0 del "%%f"
1lajk

Super, działa :slight_smile:
Mam tylko pytanie… to polecenie kasuje tylko aktualnie utworzony plik log o wielkości 0
czy sprawdza cały katalog i kasuje wszystkie zerowe logi ?

@echo OFF
for %%f in (*.log) do if %%~zf==0 del "%%f"
REM "Dla każdego pliku z rozszerzeniem log w tym katalogu, jeżeli jego rozmiar to 0, usuń

Czy da się to zrobić tylko dla aktualego pliku?
W przypadku katalogu z tysiącami plików to chyba będzie czasochłonne?

np.
for %%f in (%1.log) do if %%~zf==0 del “%%f”

ta składnia akurat nie działa ale o coś takiego mi chodziło

OK, usunąłem to z pętli i wstawiłem po jej zakończeniu. Tak będzie dobrze. Dzięki bardzo Wielkipiecu :slight_smile:

1lajk