Minhas habilidades em lote são limitadas. Para produzir resultados para muitos arquivos, eu uso DIR /a-d /s /b > dirlist.txt
. Eu importo dirlist.txt para o Excel (coluna A) e uso-o para produzir comandos arquivo por arquivo (na coluna B) que posso copiar para um arquivo em lote. É mais complicado do que fazer loop, mas pelo menos eu entendo.
A situação atual exige o cálculo do CRC32. Tenho uma ferramenta de linha de comando que expressa apenas o valor CRC32, sem o nome do arquivo correspondente. Portanto, minha solução Excel gera o nome do arquivo (ou seja, ECHO D:\[full path].ext >> output.txt
) antes de calcular o valor CRC32 (ou seja, e comercial ( &
) seguido por CRC32.exe "D:\[full path].ext" >> output.txt
). Em outras palavras, a planilha produz um único comando que indica o nome do arquivo e depois o valor CRC32.
Infelizmente, isso coloca o nome do arquivo em uma linha, em output.txt, seguido pelo valor CRC32 na próxima linha. Acho que é possível colocar os dois na mesma linha, mas essa situação parece mais complicada do que os exemplos simples que estou vendo nos tutoriais. Portanto, a questão é: existe uma maneira relativamente simples de indicar o nome do arquivo e o valor CRC32 em uma única linha de saída?
Responder1
Se você não se opõe totalmente a uma solução em lote completo, isso deve funcionar para você:
@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%
)
)
Definimos uma variável para dirlist.txt
e output.txt
para facilitar a atualização daqueles com caminhos fixos, se você quiser, e seu DIR
comando permanece inalterado. Para os loops, podemos setlocal enabledelayedexpansion
usar variáveis in-loop; nosso loop inicial analisa cada linha ( token=*
) da sua dirlist.txt
e atribui-a ao parâmetro %%A
, que definimos como nossa path
variável. Em seguida, temos nosso loop aninhado que é executado CRC32.exe
com nossa !path!
variável como argumento e atribui a saída ao parâmetro e %%B
, em seguida, define-a como a calc
variável. Por último, podemos ecoar !path!
e !calc!
na mesma linha do nosso output.txt
. No exemplo acima eu os separei com a +
(com base no título da sua pergunta), mas você pode usar o que quiser ou nada - lembre-se de que pode ser necessário escapar de um caractere especial com ^
.
Gostaria de observar que não tenho CRC32.exe, portanto, a sintaxe do comando no loop for é baseada no meu entendimento da sua pergunta. Espero que isso ajude!
Responder2
Para todos os arquivos em um diretório e seus subdiretórios, calcule seu hash/soma de verificação com crc32.exe e gere o nome do caminho totalmente qualificado seguido pelo valor de hash na mesma linha para um arquivo de texto.
Downloadcrc32.exee coloque-o na pasta do 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