У меня есть пакетный файл, который копирует некоторые локальные файлы в область хранения Google с помощью инструмента gsutil.Утилита gsutil создает хороший файл журнала, в котором отображаются сведения о загруженных файлах, а также, в порядке ли это или нет.
Source,Destination,Start,End,Md5,UploadId,Source Size,Bytes Transferred,Result,Description
file://C:\TEMP\file_1.xlsx,gs://app1/backups/file_1.xlsx,2018-12-04T15:25:48.428000Z,2018-12-04T15:25:48.804000Z,CPHHZfdlt6AePAPz6JO2KQ==,,18753,18753,OK,
file://C:\TEMP\file_2.xlsx,gs://app1/backups/file_2.xlsx,2018-12-04T15:25:48.428000Z,2018-12-04T15:25:48.813000Z,aTKCOQSPVwDycM9+NGO28Q==,,18753,18753,OK,
Я бы хотел
- проверить результат состояния в столбце 8 (OK или FAIL)
- Если состояние OK,переместите исходный файл в другую папку (чтобы он не загружался снова).
Проблема заключается в том, что к имени файла источника добавляется "file: //", который я не могу удалитьНапример,
file://C:\TEMP\file_1.xlsx
необходимо заменить на этот
C:\TEMP\file_1.xlsx
Я использую цикл for / f и не уверен, отличается ли манипуляция с переменными %% Aв цикле for / f.
@echo off
rem copy the gsutil log file into a temp file and remove the header row using the 'more' command.
more +1 raw_results.log > .\upload_results.log
rem get the source file name (column 1) and the upload result (OK) from column 8
for /f "tokens=1,8 delims=," %%A in (.\upload_results.log) do (
echo The source file is %%A , the upload status was %%B
set line=%%A
set line=!line:file://:=! >> output2.txt echo !line!
echo !line!
)
Вывод выглядит следующим образом.
The source file is file://C:\TEMP\file_1.xlsx , the upload status was OK
The source file is file://C:\TEMP\file_2.xlsx , the upload status was OK
Я ожидаю, что он выведет измененные значения в новый файл, но это не такпроизводя что-нибудь в данный момент.Обычно я бы извлек из определенного символа до конца строки что-то вроде этого, но это не работает с моим циклом For / f.
%var:~7%
Любые указатели или другой способ сделать это очень ценится.