在一個文字行上輸出檔案名稱+CRC32的簡單批次方法

在一個文字行上輸出檔案名稱+CRC32的簡單批次方法

我的批次能力有限。為了產生許多文件的結果,我使用DIR /a-d /s /b > dirlist.txt.我將 dirlist.txt 匯入 Excel(A 列),並使用它產生逐個檔案的命令(B 列),然後將其複製到批次檔中。它比循環更麻煩,但至少我理解它。

目前的情況需要CRC32計算。我有一個命令列工具,它僅表示 CRC32 值,而沒有相應的檔案名稱。因此,我的 Excel 解決方案ECHO D:\[full path].ext >> output.txt在計算 CRC32 值(即與號 ( &) 後跟)之前輸出檔案名稱(即) 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我們為和都設定了一個變量output.txt,以便您可以更輕鬆地更新具有固定路徑的路徑(如果您願意),並且您的DIR命令保持不變。對於循環,我們setlocal enabledelayedexpansion可以使用循環內變數;我們的初始循環會查看token=*您的每一行()dirlist.txt並將其指派給%%A我們將其設定為path變數的參數。接下來,我們有一個嵌套循環,它CRC32.exe!path!變數作為參數執行,並將輸出分配給參數%%B,然後將其設為calc變數。最後,我們可以在我們的 的同一行上呼應!path!和。在上面的範例中,我用 a 將它們分開(根據您的問題的標題),但您可以使用您想要的任何內容,或者什麼都不用 - 只要記住您可能需要使用 轉義特殊字元 。 我想指出的是,我沒有 CRC32.exe,因此 for 迴圈中命令的語法是基於我對您的問題的理解。希望有幫助!!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 

相關內容