하나의 텍스트 라인에 파일 이름 + CRC32를 출력하는 간단한 배치 방법

하나의 텍스트 라인에 파일 이름 + CRC32를 출력하는 간단한 배치 방법

내 배치 기술은 제한되어 있습니다. 많은 파일에 대한 결과를 생성하기 위해 DIR /a-d /s /b > dirlist.txt. dirlist.txt를 Excel(A열)로 가져오고 이를 사용하여 배치 파일에 복사할 수 있는 파일별 명령(B열)을 생성합니다. 루핑보다 더 번거롭지만 적어도 나는 그것을 이해합니다.

현재 상황에서는 CRC32 계산이 필요합니다. 해당 파일 이름 없이 CRC32 값만 표현하는 명령줄 도구가 있습니다. 따라서 내 Excel 솔루션은 ECHO D:\[full path].ext >> output.txtCRC32 값(즉, 앰퍼샌드( &) 다음에 CRC32.exe "D:\[full path].ext" >> output.txt)을 계산하기 전에 파일 이름(예: )을 출력합니다. 즉, 스프레드시트는 파일 이름과 CRC32 값을 나타내는 단일 명령을 생성합니다.

불행하게도 이렇게 하면 파일 이름이 한 줄(output.txt)에 표시되고 그 뒤에 CRC32 값이 다음 줄에 표시됩니다. 나는 두 가지를 같은 줄에 두는 것이 가능하다고 생각하지만 이 상황은 튜토리얼에서 보는 간단한 예보다 더 복잡해 보입니다. 따라서 문제는 출력의 한 줄에 파일 이름과 CRC32 값을 명시하는 비교적 간단한 방법이 있습니까?

답변1

전체 배치 솔루션을 완전히 반대하지 않는다면 다음이 도움이 될 것입니다.

@echo off

set "list=dirlist.txt"
set "out=output.txt"

dir /a-d /s /b > %list%

setlocal enabledelayedexpansion
for /f "tokens=*" %%A in (%list%) do (
    set "path=%%A"
    for /f %%B in ('CRC32.exe "!path!"') do (
        set "calc=%%B"
        echo !path! + !calc! >> %out%
    )
)

원하는 경우 고정 경로가 있는 항목을 더 쉽게 업데이트할 수 있도록 dirlist.txt및 두 가지 모두에 대한 변수를 설정했으며 명령은 변경되지 않습니다. 루프의 경우 루프 내 변수를 사용할 수 있습니다. 초기 루프는 모든 행( ) 을 살펴보고 이를 변수 로 설정한 매개변수에 할당합니다 . 다음으로 변수를 인수로 사용 하여 실행 하고 출력을 매개변수에 할당한 다음 이를 변수로 설정하는 중첩 루프가 있습니다 . 마지막으로 echo 및 의 같은 줄에 있습니다 . 위의 예에서는 (질문 제목에 따라) 로 구분했지만 원하는 대로 사용할 수도 있고 아무것도 사용할 수도 없습니다. 로 특수 문자를 이스케이프해야 할 수도 있다는 점만 기억하세요 . 저는 CRC32.exe가 없기 때문에 for-loop의 명령 구문은 귀하의 질문에 대한 제가 이해한 내용을 바탕으로 작성되었습니다. 이것이 도움이 되기를 바랍니다!output.txtDIRsetlocal enabledelayedexpansiontoken=*dirlist.txt%%ApathCRC32.exe!path!%%Bcalc!path!!calc!output.txt+^

답변2

디렉터리 및 하위 디렉터리의 모든 파일에 대해 crc32.exe를 사용하여 해시/체크섬을 계산하고 동일한 줄의 정규화된 경로 이름과 해시 값을 텍스트 파일로 출력합니다.

다운로드crc32.exe그리고 Windows 폴더에 넣으세요.

@echo off
setlocal enableextensions
cd.> dirlist.txt
for /F "eol=| tokens=* delims=" %%g in ('dir *.* /S /A-D /B 2^>nul') do (
for /F %%h in ('%systemroot%\crc32.exe "%%g"') do (
echo %%g + %%h >> dirlist.txt
)
)
exit 
rem 

관련 정보