문제

자체 라인에 파일 이름을 나열하는 파일이 있으며 특정 디렉토리에 각각 존재하는지 테스트하고 싶습니다. 예를 들어, 파일의 일부 샘플 라인은

mshta.dll
foobar.dll
somethingelse.dll

내가 관심있는 디렉토리는입니다 X:\Windows\System32\, 따라서 다음 파일이 있는지 확인하고 싶습니다.

X:\Windows\System32\mshta.dll
X:\Windows\System32\foobar.dll
X:\Windows\System32\somethingelse.dll

Windows 명령 프롬프트를 사용하여 어떻게해야합니까? 또한 (호기심에서) Bash 또는 다른 Unix 쉘을 사용하여 어떻게해야합니까?

도움이 되었습니까?

해결책

cmd.exe에서 /f %변하기 쉬운 에 ( 파일 이름 ) 하다 명령 당신이 원하는 것을 주어야합니다. 이것은 내용을 읽습니다 파일 이름 (그리고 그것들은 하나 이상의 파일 이름 일 수 있습니다) 한 번에 한 줄 씩 줄을 %변수로 배치합니다 (더 많은 것; 명령 프롬프트에서 도움을 받으십시오). 다른 사람이 명령 스크립트를 제공하지 않으면 시도하겠습니다.

편집 : 요청 된 CMD.exe 스크립트에 대한 나의 시도 :

@echo off
rem first arg is the file containing filenames
rem second arg is the target directory

FOR /F %%f IN (%1) DO IF EXIST %2\%%f ECHO %%f exists in %2

위의 스크립트입니다 ~ 해야 하다 대본이 되십시오. .cmd 또는 .bat 파일의 루프 용 a 이상한 이유 때문에 변수 앞에 이중 비율이 있어야합니다.

이제 bash | ash | dash | sh | ksh로 작동하는 스크립트의 경우 :

filename="${1:-please specify filename containing filenames}"
directory="${2:-please specify directory to check}
for fn in `cat "$filename"`
do
    [ -f "$directory"/"$fn" ] && echo "$fn" exists in "$directory"
done

다른 팁

세게 때리다:

while read f; do 
    [ -f "$f" ] && echo "$f" exists
done < file.txt
for /f %i in (files.txt) do @if exist "%i" (@echo Present: %i) else (@echo Missing: %i)

Windows에서 :


type file.txt >NUL 2>NUL
if ERRORLEVEL 1 then echo "file doesn't exist"

(이것은 가장 좋은 방법이 아닐 수도 있습니다. 그것은 내가 아는 방법입니다. 또한 참조하십시오. http://blogs.msdn.com/oldnewthing/archive/2008/09/26/8965755.aspx)

Bash에서 :


if ( test -e file.txt ); then echo "file exists"; fi

그러나 Win32와 *nix의 기본 파일 시스템을 사용하여 작업의 원자력을 보장 할 방법이 없습니다. 즉, 파일 A, B 및 C, 다른 프로세스 또는 스레드의 존재를 확인하는 경우 파일을 통과 한 후 파일 A를 삭제하고 B와 C를 찾고있는 동안 A를 삭제했을 수 있습니다.

다음과 같은 파일 시스템 거래 NTF 이 제한을 극복 할 수 있습니다.

위의 대부분의 솔루션에 하나의 작은 의견을 추가하고 싶었습니다. 특정 파일이 존재하는 경우 실제로 테스트하지 않습니다. 파일이 존재하는지 확인하고 파일에 액세스 할 수 있습니다. 파일이 디렉토리에 존재할 수 있습니다. 파일이 존재하더라도 파일을 볼 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top