Jeśli chcesz to zrobić cmd
, to prosty sposób na zrobienie tego:
set count=0 & for %x in (*) do @(set /a count+=1 >nul)
echo %count%
To zakłada linię poleceń. Zrobiłbyś to w pliku wsadowym
@echo off
setlocal enableextensions
set count=0
for %%x in (*) do set /a count+=1
echo %count%
endlocal
co robi coś ładniejszego. Możesz upuścić >nul
wsadowo, ponieważ set /a
nie wyświetli wyniku, jeśli zostanie uruchomiony z pliku wsadowego - robi to bezpośrednio z wiersza poleceń. Ponadto %
znak w for
pętli musi zostać podwojony.
Widziałem całkiem sporo przypadków, w których ludzie próbują sprytnych sztuczek find /c
. Bądź z nimi bardzo ostrożny, ponieważ różne rzeczy mogą to zepsuć.
Typowe błędy:
Za pomocą find /c /v
i spróbuj znaleźć coś, co nigdy nie jest zawarte w nazwie pliku, np ::
. Przyzwyczajenie. Praca. Niezawodnie. Gdy okno konsoli jest ustawione na czcionki rastrowe, możesz uzyskać tę kombinację znaków. Mogę zawierać znaków w nazwie pliku, takie jak :
, ?
itp w ich pełnej szerokości wariantów na przykład, który będzie następnie zamieniony na ich normalne odpowiedniki ASCII, który złamie ten. Jeśli potrzebujesz dokładnej liczby, nie próbuj tego.
Używając find /c
i spróbuj znaleźć coś, co zawsze jest zawarte w nazwie pliku. Oczywiście kropka ( .
) jest złym wyborem. Sugeruje inna odpowiedź
dir /a-d | find /c ":"
który zakłada kilka rzeczy na temat ustawień użytkownika, z których nie wszystkie są gwarantowane (pozostawiłem komentarz szczegółowo opisujący problemy) i zwraca zbyt wiele wyników.
Ogólnie rzecz biorąc, chcesz użyć, find
na dir /b
którym odcina się wszystkie elementy inne niż nazwa pliku i w ten sposób pozwala uniknąć błędów słupka ogrodzeniowego.
Zatem eleganckim wariantem byłoby:
dir /b /a-d | find /c /v ""
który najpierw wyświetli wszystkie nazwy plików, po jednym wierszu. A następnie policz wszystkie wiersze tego wyjścia, które nie są puste. Ponieważ nazwa pliku nie może być pusta (chyba że czegoś mi brakuje, ale Unicode nie uruchomi tego zgodnie z moimi testami).
dir /b /a-d | find /c /v ""
%count%
jest on rozszerzany w czasie analizy.Zapytaj, a otrzymasz: http://technet.microsoft.com/en-us/library/ee692796.aspx
FYI .. Przeszukałem „pliki zliczania PowerShell”.
źródło
(Get-ChildItem -recurse -filter "*.ps1").Count
Słowo ostrzeżenia o używaniu programu PowerShell do takich prostych operacji na plikach - jest niesamowicie powolny w porównaniu do cmd.exe, szczególnie przez połączenia sieciowe lub gdy w katalogu są tysiące plików. Zobacz ten post na forum, aby uzyskać więcej informacji.
źródło
dir
daje całkowitą liczbę plików na dole.źródło
dir > file
.. ahh tęsknię za POSIXdir > file
nie powinien działać w systemie Windows? Wiesz, przekierowanie wyjścia nie jest dokładnie magiczne.dir | grep (something)
aby uniknąć powolnego zapisu na ekranie, który spowalnia działanie (i całkowicie go minimalizuje).Najszybszą metodą, jaką znalazłem, jest uruchomienie następujących poleceń w konsoli PS.
gdzie $ path to ścieżka lokalna lub udział UNC.
źródło
wystarczy policzyć linie z wyjścia dir / B (w tym katalogi):
dir /B | find /c /v "~~~"
po prostu policz pliki (bez katalogów):
dir /A-D /B | find /c /v "~~~"
źródło
Znaleziono to w sieci:
Testowałem i wydaje się, że działa.
źródło
dir
polecenie zawiera wiersz z dwukropkiem, który nie jest plikiem. (2) Zależy to od formatu czasu, aby uwzględnić dwukropek, co niekoniecznie musi tak być. (3) Opiera się na formacie liczbowym bez dwukropka, co również niekoniecznie musi być. Poza tym przejrzenie pliku tutaj jest niepotrzebne i nie będzie działać, jeśli nie masz dostępu do zapisu - zły pomysł.Tylko zastrzeżenie dla tych, którzy mogliby użyć powyższej odpowiedzi Trevoke PowerShell (wiersz polecenia systemu Windows: jak uzyskać liczbę wszystkich plików w bieżącym katalogu? ): Zgodnie z projektem echo właściwości Count kolekcji zwróconej przez Get-ChildItem może dawać mylące wyniki jeśli wartość wynosi 1 lub 0. Jest tak, ponieważ właściwość Count jest dostępna tylko dla tablic. Jeśli Get-ChildItem zwróci mniej niż 2 elementy, wynikiem jest skalar, a .Count nic nie zwraca. Aby obejść ten problem, jawnie wrzuć go do tablicy, np. @ (Get-ChildItem C: \ Scripts) .Count.
Aby uzyskać więcej informacji, zobacz http://connect.microsoft.com/PowerShell/feedback/details/354672/get-childitem-count-problem-with-one-file lub http://www.vistax64.com/powershell/266379 -get-childitem-count-not-working-one-file.html .
źródło
dir
zwraca liczbę plików i katalogów na doleźródło
DIr oczywiście zadziała
Nie instalując niczego na serwerze, ale mając PowerShell na stacji roboczej, możesz:
to polecenie da ci wszystkie pliki (systemowe i ukryte zawarte) i, jak wspomniano wcześniej, jeśli PowerShell jest na komputerze, możesz po prostu
Pamiętaj, że jeśli nie uwzględnisz . otrzymasz liczbę wszystkich plików i wszystkich katalogów. Nie uwzględnisz ukrytych i systemowych plików, które musisz dodać -force, aby policzyć je wszystkie
źródło
Gdybym potrzebował tego tylko raz, po prostu użyłbym dir, w przeciwnym razie rozważyłbym uruchomienie własnej, prawdopodobnie jako aplikacji C #, ponieważ to byłbym najbardziej zaznajomiony (chociaż VBScript lub PowerShell również byłyby wykonalne).
(Nawiasem mówiąc - to nie jest DOS, jeśli używasz cmd.exe)
źródło
Wierzę, że możesz użyć atrybutu, aby uzyskać liczbę plików:
Spowoduje to utworzenie pliku o nazwie filecount.txt w bieżącym katalogu z liczbą plików i folderów w bieżącym katalogu (w tym nowo utworzonego pliku). Możesz zmienić
do
w celu uzyskania liczby plików określonego katalogu. Usuń opcję „/ D”, jeśli nie chcesz liczyć folderów. Opcja „/ s” przetwarza pliki we wszystkich katalogach w określonej ścieżce. Więc usuń go, jeśli chcesz tylko pliki w określonej ścieżce i nie chcesz dołączać plików do podfolderów.
Na przykład jeśli chcesz dowiedzieć się, ile plików znajduje się na dysku C: \, a nie w żadnym podfolderze, użyj polecenia:
źródło
Robię coś podobnego i działa to natychmiast z dowolną liczbą plików.
źródło
find
nie jest dobrym pomysłem. Szczegółowe informacje można znaleźć w zaakceptowanej odpowiedzi.