Я надеюсь, что вы сможете помочь и объяснить, в чем проблема. Как и большинство проблем, я уверен, что это будет очень просто для тех, кто регулярно использует Batch Scripts.Batch File file output, string manipulation
Задача, которую я пытаюсь решить, состоит в том, чтобы взять список файлов XML из папки, передать их в Sha1 exe, получить выход, изменить его, объединить результат и затем, наконец, вывести результат в файл , Я надеялся, что мне не нужно выводить на два файла, но я не могу получить выход Sha1 для переменной, чтобы манипулировать им.
В чем проблема? В настоящее время, когда вывод текста возвращается, он выглядит как «size = size: 3», и когда я пытаюсь манипулировать строкой, она беспорядочна с выходом. Пример ниже.
Кодекс:
set "xmlfilelocation=C:\Users\ADMIN\Documents\test"
set "manifestfile=C:\Users\ADMIN\Documents\manifest.txt"
set "Sha1=C:\Users\ADMIN\\sha1.exe"
set "sha1output=C:\Users\ADMIN\Documents\sha1output.txt"
)
if exist %xmlfilelocation% (
for /f %%f in ('dir /b %xmlfilelocation%') do (
rem Takes the file name which is currently been passed to the Sha1 engine
set filename = %%f
rem Run the Sha1 command
C:\Users\IBM_ADMIN\Documents\Sha1.exe -r %xmlfilelocation%\%%f >> %sha1output%
rem Waits _for the current Sha1 execution to be run.
PING 1.1.1.1 -n 1 -w 1000 >NUL
)
) else (
echo No folder found
)
::read %THECSVFILE% and loop through each line
for /F "usebackq tokens=* delims= " %%A in (%sha1output%) do (
set the_line=%%A
call :process_line
)
goto TheEnd
:process_line
for /F "usebackq tokens=1,2,3,4,5 delims= " %%1 in ('%the_line%') do (
set OUTPUTLINE=name=%%2 sha1=%%3 size=%%4 url=%xmlfilelocation%\%%2
echo %OUTPUTLINE% >> %manifestfile%
)
rem del = %sha1output%
Перед манипуляций со строками, файл отображается правильно отдельно от sha1 = sha1: который следует читать только sha1 = и размер = размер: должен читать только размер = которого манипуляция должна решить.
name=New6.xml sha1=sha1:da39a3ee5e6b4b0d3255bfef95601890afd80709 size=size:0 url=C:\Users\IBM_ADMIN\Documents\test\New6.xml
name=New1.xml sha1=sha1:da39a3ee5e6b4b0d3255bfef95601890afd80709 size=size:0 url=C:\Users\IBM_ADMIN\Documents\test\New1.xml
name=New2.xml sha1=sha1:f10e2821bbbea527ea02200352313bc059445190 size=size:3 url=C:\Users\IBM_ADMIN\Documents\test\New2.xml
name=New3.xml sha1=sha1:da39a3ee5e6b4b0d3255bfef95601890afd80709 size=size:0 url=C:\Users\IBM_ADMIN\Documents\test\New3.xml
name=New4.xml sha1=sha1:da39a3ee5e6b4b0d3255bfef95601890afd80709 size=size:0 url=C:\Users\IBM_ADMIN\Documents\test\New4.xml
name=New5.xml sha1=sha1:f10e2821bbbea527ea02200352313bc059445190 size=size:3 url=C:\Users\IBM_ADMIN\Documents\test\New5.xml
Когда я добавляю в дополнительных линий, чтобы манипулировать строку:
:process_line
for /F "usebackq tokens=1,2,3,4,5 delims= " %%1 in ('%the_line:,=~%') do (
set sha1=%%3
set size=%%4
set url=%xmlfilelocation%\%%2
set THISLINE=name=%%2 sha1=%sha1:~5% size=%size:~5% url=%url%
rem echo The Line: %OUTPUTLINE%
echo %OUTPUTLINE% >> %manifestfile%
)
Возвращает файл, в котором имя выходного не отображается должным образом. Обычно первый или последний файл, значение Sha1, по какой-либо причине выводится как каталог. Это происходит только после того, как я попытаюсь манипулировать строкой.
name=New6.xml sha1=f10e2821bbbea527ea02200352313bc059445190 size=3 url=C:\Users\IBM_ADMIN\Documents\test\New5.xml
name=New1.xml sha1=ers\IBM_ADMIN\\sha1.exe size=0 url=C:\Users\IBM_ADMIN\Documents\test\New6.xml
name=New2.xml sha1=da39a3ee5e6b4b0d3255bfef95601890afd80709 size=0 url=C:\Users\IBM_ADMIN\Documents\test\New1.xml
name=New3.xml sha1=f10e2821bbbea527ea02200352313bc059445190 size=3 url=C:\Users\IBM_ADMIN\Documents\test\New2.xml
name=New4.xml sha1=da39a3ee5e6b4b0d3255bfef95601890afd80709 size=0 url=C:\Users\IBM_ADMIN\Documents\test\New3.xml
name=New5.xml sha1=da39a3ee5e6b4b0d3255bfef95601890afd80709 size=0 url=C:\Users\IBM_ADMIN\Documents\test\New4.xml
Пример вывода SHA1, это то, что выходы Sha1.exe без каких-либо манипуляций со мной.
prefetch New1.xml sha1:da39a3ee5e6b4b0d3255bfef95601890afd80709 size:0 http://EXAMPLEURL/REPLACEME.exe
prefetch New2.xml sha1:f10e2821bbbea527ea02200352313bc059445190 size:3 http://EXAMPLEURL/REPLACEME.exe
prefetch New3.xml sha1:da39a3ee5e6b4b0d3255bfef95601890afd80709 size:0 http://EXAMPLEURL/REPLACEME.exe
prefetch New4.xml sha1:da39a3ee5e6b4b0d3255bfef95601890afd80709 size:0 http://EXAMPLEURL/REPLACEME.exe
prefetch New5.xml sha1:f10e2821bbbea527ea02200352313bc059445190 size:3 http://EXAMPLEURL/REPLACEME.exe
prefetch New6.xml sha1:da39a3ee5e6b4b0d3255bfef95601890afd80709 size:0 http://EXAMPLEURL/REPLACEME.exe
Что конечный результат должен выглядеть для 6 файлов:
name=New6.xml sha1=f10e2821bbbea527ea02200352313bc059445190 size=3 url=C:\Users\ADMIN\Documents\test\New5.xml
name=New1.xml sha1=da39a3ee5e6b4b0d3255bfef95601890afd80709 size=0 url=C:\Users\ADMIN\Documents\test\New6.xml
name=New2.xml sha1=da39a3ee5e6b4b0d3255bfef95601890afd80709 size=0 url=C:\Users\ADMIN\Documents\test\New1.xml
name=New3.xml sha1=f10e2821bbbea527ea02200352313bc059445190 size=3 url=C:\Users\ADMIN\Documents\test\New2.xml
name=New4.xml sha1=da39a3ee5e6b4b0d3255bfef95601890afd80709 size=0 url=C:\Users\ADMIN\Documents\test\New3.xml
name=New5.xml sha1=da39a3ee5e6b4b0d3255bfef95601890afd80709 size=0 url=C:\Users\ADMIN\Documents\test\New4.xml
Уточнить, что вам нужно выходной текст выглядеть, учитывая выход Sha1. – foxidrive
Да, конечно, как вы можете видеть сверху, большинство из них верны, только в первом примере имя неверно, а второе значение Sha1 - путь к каталогу. Должно быть, name = file.xml sha1 = sha1value size = number URL = путь к файлу – QuinsUK
Вы показали 'Before the string manipulation' и' Пример вывода Sha1 ', и они не совпадают. Неясно, что такое вход и нужный результат, поскольку для получения результата можно использовать другой скрипт/инструмент. – foxidrive