Udskriv mapper og filer rekursivt ved hjælp af Windows Batch

Indlæg af Hanne Mølgaard Plasc

Problem




   Mulig duplikat:

  Windows-batch (filer)





Hej . Jeg forsøger at lave et batch script, der udskriver for hvert filnavn fra kommandolinjen alle undermapper i mappen, hvor filen er fundet (jeg har som parametre en mappe og en liste over filnavne). Undermappenavnene skal sorteres i faldende rækkefølge af filstørrelserne (filen kan have forskellige størrelser i forskellige undermapper).
Jeg kan ikke finde et script, der udskriver stierne. Kan nogen hjælpe?


@echo off
REM check the numbers of parameters
if "\%2"=="" goto err1
REM check: is first parameter a directory?
if NOT EXIST \%1NUL goto err2
set d=\%1
shift
REM iterate the rest of the parametersa


for \%\%i in \%dir\%  (
find \%dir /name \%i > temp

if EXIST du /b temp | cut /f 1 goto err3 
  myvar=TYPE temp
  echo "file " \%i "is in: "

  for \%\%j in \%myvar do
     echo \%j

  echo after sort
  du /b \%myvar | sort /nr       
)

:err1
echo Two parameters are necessary 
goto end
:err2
echo First parameter must be a directory.
:err3 
echo file does not exist.
:end

Bedste reference


Her er et script, der gør det, hvad du vil, undskyld den lange forsinkelse.


@echo off
REM application logic. askForDir. [askForFile => findFile]{infinity}
:askForDir 
cls
set basePath=
echo Not supplying a directory will exit. Trailing slash please
set /p basePath=Search in directory: 
if x\%basePath\%==x goto endApp 

REM Gets a file name, sets the curDir
:askForFile
cls
set fileName=
echo Currently searching in: '\%basePath\%'
echo Not supplying a filename will return you to directory selection
set /p fileName=Search for file: 
if x\%fileName\%==x goto askForDir

REM We know what we're searching for and where
set file=\%basePath\%\%fileName\%
if exist \%file\% (
    echo \%file\%
)
REM check recursively for the fileName in each subfolder
FOR /R \%basePath\% \%\%f IN (\%fileName\%) DO (
    echo \%\%f
)

REM Finished dir and all subs, askForFile again
echo Done.
pause>nul 
goto askForFile

REM Finished
:endApp
cls 
echo We hope you enjoyed this presentation. 
pause>nul


Selvom som Jeb påpegede, anbefaler jeg, at du læser nogle af det grundlæggende, i betragtning af dette er lektier, vil det ikke hjælpe dig så meget, hvis du ikke lærer at gøre det. Prøvede at kommentere min kode så meget for dig at forstå, men prøv at læse mere om brugen af ​​batch-filer. [4]