문제

A를 사용하여 디렉토리의 각 파일을 어떻게 반복 할 수 있습니까? for 고리?

그리고 특정 항목이 디렉토리인지 또는 파일인지 어떻게 알 수 있습니까?

도움이 되었습니까?

해결책

현재 디렉토리에 모든 파일 (및 파일 만)을 나열합니다.

for /r %i in (*) do echo %i

또한 배치 파일로 해당 명령을 실행하면 % 부호를 두 배로 늘려야합니다.

for /r %%i in (*) do echo %%i

(감사합니다 @Agnul)

다른 팁

반복 ...

  • ... 현재 DIR의 파일 : for %f in (.\*) do @echo %f
  • ... 현재 DIR의 서브 디르 : for /D %s in (.\*) do @echo %s
  • ... 현재 및 모든 서브 디르의 파일 : for /R %f in (.\*) do @echo %f
  • ... 현재 및 모든 서브 디르의 서브 디르 : for /R /D %s in (.\*) do @echo %s

불행히도 나는 동시에 파일과 하위 디어를 반복 할 수있는 방법을 찾지 못했습니다.

그냥 사용하십시오 Cygwin 훨씬 더 많은 기능을 위해 배쉬를 사용합니다.

이 외에도 : MS Windows의 빌드 도움이 CMD의 명령 줄 구문에 대한 설명을위한 훌륭한 리소스임을 알았습니까?

또한 여기를 살펴보십시오. http://technet.microsoft.com/en-us/library/bb490890.aspx

달리기 사이에는 미묘한 차이가 있습니다 FOR 명령 줄 및 배치 파일에서. 배치 파일에서는 두 개를 넣어야합니다. % 각 변수 참조 앞의 문자.

명령 줄에서 :

FOR %i IN (*) DO ECHO %i

배치 파일에서 :

FOR %%i IN (*) DO ECHO %%i

각 파일을 반복하려면 루프 용 A가 작동합니다.

for %%f in (directory\path\*) do ( something_here )

제 경우에는 파일 내용, 이름 등을 원했습니다.

이것은 몇 가지 문제로 이어지고 내 유스 케이스가 도움이 될 수 있다고 생각했습니다. 다음은 디렉토리의 각 '.txt'파일에서 정보를 읽고 정보를 수행 할 수있는 루프입니다 (예 : Setx).

@ECHO OFF
setlocal enabledelayedexpansion
for %%f in (directory\path\*.txt) do (
  set /p val=<%%f
  echo "fullname: %%f"
  echo "name: %%~nf"
  echo "contents: !val!"
)

*제한 : val <= %% f는 파일의 첫 번째 줄만 얻습니다.

이 for-loop는 모든 파일을 디렉토리에 나열합니다.

pushd somedir
for /f "delims=" %%f in ('dir /b /a-d-h-s') do echo %%f
popd

"delims ="는 공백이있는 긴 파일 이름을 보여주는 데 유용합니다 ....

'/b "크기 날짜가 아닌 이름 만 표시 ..

Dir 's /a 논쟁에 대해 알아야 할 것들.

  • "/a"의 사용은 숨겨진 및 시스템 속성을 포함하여 모든 것을 나열합니다.
  • "/ad"는 숨겨진 및 시스템을 포함한 하위 디렉토리 만 표시합니다.
  • "/ad"인수는 'd'irectory 속성으로 컨텐츠를 제거합니다.
  • "/adhs"는 모든 것을 보여 주지만 'd'irectory ', h'idden's'ystem 속성이있는 항목.

CommandLine에서 이것을 사용하는 경우 "%"를 제거하십시오.

도움이 되었기를 바랍니다.

%1은 전달 된 첫 번째 인수를 말하며 반복자에서 사용할 수 없습니다.

이 시도:

@echo off
for %%i in (*.*) do echo %%i
for %1 in (*.*) do echo %1

전체 가이드를 위해 CMD에서 "도움말"을 시도해보십시오.

이것은 XP 명령의 안내서입니다. http://www.ss64.com/nt/

다음 코드는 이름이 지정된 파일을 만듭니다 "AllFilesincurrentDirectoryList.txt" 현재 디렉토리에있는 현재 디렉토리에서 현재 디렉토리의 모든 파일 목록 (전용 파일)이 포함되어 있습니다. 확인 해봐

dir /b /a-d > AllFilesInCurrentDirectorylist.txt

또한 사용할 수도 있습니다 forfiles 명령:

forfiles /s 

또한 디렉토리인지 확인하십시오

forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"

배치에서는 이름이 파일이나 디렉토리라고 말할 수 없기 때문에 vbscript (Windows 스크립팅 호스트)를 사용합니다.

VBS에서는 다음과 같은 것일 수 있습니다.

Dim fileSystemObject
Set fileSystemObject = CreateObject("Scripting.FileSystemObject")

Dim mainFolder
Set mainFolder = fileSystemObject.GetFolder(myFolder)

Dim files
Set files = mainFolder.Files

For Each file in files
...
Next

Dim subFolders
Set subFolders = mainFolder.SubFolders

For Each folder in subFolders
...
Next

확인하다 MSDN의 FileSystemObject.

파일 이름을 얻기 위해 /l 옵션과 함께 Xcopy 명령을 사용합니다. 따라서 디렉토리 또는 하위 디렉토리의 모든 파일을 얻으려면 다음과 같은 작업을 수행 할 수 있습니다.

for /f "delims=" %%a IN ('xcopy "D:\*.pdf" c:\ /l') do echo %%a

C : 를 대상으로 사용하여 항상 Windows 시스템에 존재하기 때문에 복사하지 않으므로 중요하지 않습니다. 하위 디렉토리도 원한다면 마지막에 /s 옵션 만 사용하십시오. 다른 이유로 필요한 경우 다른 Xcopy 스위치를 사용할 수도 있습니다.

파일이 디렉토리인지 테스트하려면 이것을 시도해보십시오.

FOR /F "delims=" %I IN ('DIR /B /AD "filename" 2^>^&1 ^>NUL') DO IF "%I" == "File Not Found" ECHO Not a directory

이것은 파일이 디렉토리가 아닌지 여부를 알려줍니다. 파일이 존재하지 않으면 사실이므로 필요한 경우 먼저 확인하십시오. Carets (^)는 리디렉션 기호를 피하는 데 사용되며 파일 목록 출력이 표시되지 않도록 NUL로 리디렉션되며 DIR 목록의 오류 출력이 출력으로 리디렉션되어 DIR의 메시지에 대해 테스트 할 수 있습니다 "파일을 찾을 수 없습니다. ".

이 시도:

::Example directory
set SetupDir=C:\Users

::Loop in the folder with "/r" to search in recursive folders, %%f being a loop ::variable 
for /r "%SetupDir%" %%f in (*.msi *.exe) do set /a counter+=1

echo there are %counter% files in your folder

디렉토리 (및 서브 디렉토리)에서 .msi 및 .exe 파일을 계산합니다. 또한 폴더와 파일의 차이를 실행 파일로 만듭니다.

루프에서 다른 파일을 필터링 해야하는 경우 (.pptx .docx ..) 확장자를 추가하십시오 (.pptx .docx ..)

내 경우에는 온도 폴더 아래의 모든 파일과 폴더를 삭제해야했습니다. 그래서 이것이 내가 그 일을하게 된 방법입니다. 파일 1 개, 폴더 용으로 하나의 루프를 실행해야했습니다. 파일이나 폴더가 이름에 공간이 있으면 사용해야합니다.

cd %USERPROFILE%\AppData\Local\Temp\
rem files only
for /r %%a in (*) do (
echo deleting file "%%a" ...
if exist "%%a" del /s /q "%%a"
)
rem folders only
for /D %%a in (*) do (
echo deleting folder "%%a" ...
if exist "%%a" rmdir /s /q "%%a"
)

에게 모든 파일과 폴더를 반복합니다 당신이 사용할 수있는

for /F "delims=" %%a in ('dir /b /s') do echo %%a

에게 모든 폴더를 통해서만 반복하십시오 파일이 아니라 사용할 수 있습니다

for /F "delims=" %%a in ('dir /a:d /b /s') do echo %%a

어디에 /s 디렉토리 트리 전체에 모든 결과를 무제한 깊이로 제공합니다. 당신은 건너 뛸 수 있습니다 /s 하위 폴더가 아닌 해당 폴더의 내용을 반복하려면

반복 검색 구현

에게 특정 이름의 파일과 폴더를 통해 반복합니다 당신은 이름을 검색하고 루프를 사용하는 반복 할 수 있습니다.

for /F "delims=" %%a in ('dir "file or folder name" /b /s') do echo %%a

에게 파일이 아닌 특정 폴더/디렉토리를 통해 반복, 그런 다음 사용하십시오 /AD 같은 명령에서

for /F "delims=" %%a in ('dir "folder name" /b /AD /s') do echo %%a

이 참조를 찾을 때까지 절대적인 길로 작업하기 위해 JOP의 답변을 얻는 데 어려움이있었습니다. https://ss64.com/nt/for_r.html

다음 예제는 절대 경로에서 제공 한 디렉토리의 모든 파일을 반복합니다.

For /R C:\absoulte\path\ %%G IN (*.*) do (
  Echo %%G
)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top