Sunil KK Ответов: 1

Циклический переход между двумя папками и выполняемые операции с пакетным файлом.


Привет,

На самом деле, я должен сравнить два файла excel, которые находятся в двух разных папках.
Например, Папка 1. Abc_rpt1 и Folder2. Xyz_rpt1.
Обратите внимание, что в обеих папках шаблон отчета одинаков, но имя отчета и значения различны. В обеих папках отчеты находятся в той же последовательности, что и на первом месте у нас есть abc_rpt1, на втором месте abc_rpt2, как и у меня. Folder2 Xyz-rpt1 и Xyz_rpt2. Теперь в моем коде он сравнивает отчет, когда имя отчета в обеих папках будет одинаковым.

Что я уже пробовал:

@echo off
set /p "MasterFolder1=MasterFolder1:"
set /p "MasterFolder2=MasterFolder2:"
Set "LogFile=%~dpn0.txt"
If exist "%LogFile%" Del "%LogFile%"

Set "PECfolder=C:\SunilKK-Latitude-E6430s\SunilKK\Software\PreciseExcelComparator\v1.1\PreciseExcelComparator_PEC"
::echo %PECfolder%
PushD "%PECfolder%" || ( Echo can't locate %PECfolder% &Pause&Exit /B 0)

FOR /f "delims=" %%f IN ('dir /b /s "%MasterFolder1%\*.xls"') do (
::echo %MasterFolder1%
    If exist "%Masterfolder2%\%%~nxf" (
        call java -jar "C:\SunilKK-Latitude-E6430s\SunilKK\Software\PreciseExcelComparator\v1.1\PreciseExcelComparator_PEC\PEC.jar" "%%~ff" "%Masterfolder2%\%%~nxf" 0 0
    ) else (
        echo No pendant to "%%f" found in "%MasterFolder2%" >> %"LogFile%"
    )
)
pause

Maciej Los

И вот ваш вопрос...

Sunil KK

Привет, Мацей Лос, я не нашел твоего ответа?

Maciej Los

Потому что я его еще не отправил.

Sunil KK

Ладно, во-первых, спасибо, что проявили интерес к моему запросу. Ну, пожалуйста, подтвердите, что я делаю не так в своем коде.

Maciej Los

Я понятия не имею, что случилось... Вы сказали нам, что ваш код делает прямо сейчас, и вы не сказали, Чего вы пытаетесь достичь. Можете ли вы предоставить более подробную информацию о вашей проблеме?

Sunil KK

хорошо, я хочу, чтобы этот код сравнивал один отчет с другим отчетом. Например, предположим, что в folder1 у нас есть abc_report1 и folder2 xyz_report1. Поэтому, используя вызов java-jar, он должен сравнить эти два отчета. параметр должен быть похож на вызов java - jar "C:\softwar....\PEC.jar" C:\Folder1\abc_report1" C:\Folder2\xyz_report1". Но потому что я проверяю, существует ли условие, так что это будет работать, когда у нас будет одно и то же имя отчета в обеих папках. Однако в моем случае, как я уже упоминал ранее, имя отчета не совпадает, только шаблон один и тот же.

Maciej Los

Вах это pec.jar программное обеспечение? Я ничего об этом не слышал.
И все же вы не объяснили, что подразумеваете под сравнением. Вы пытаетесь проверить, содержат ли оба файла одинаковые значения?

Sunil KK

pec.jar это наш внутренний инструмент, который сравнивает два файла excel. В этом инструменте у нас есть два параметра, и в обоих параметрах мы должны передавать имена отчетов. Этот инструмент помогает, когда у нас меньше отчетов, но если нам нужно сравнить 100 отчетов, то пользователь должен запустить этот инструмент 100 раз. Вот почему я создал пакетный файл, который будет выбирать один за другим отчеты в обеих папках и передавать параметр для этого инструмента.

Для сравнения отчетов этот инструмент будет сравнивать отчет ячейка за ячейкой со значением, я просто хочу дать параметр, и параметр будет выглядеть так: "FolderName1\reportname1.xls" FolderName2\reportname1.xls". Опять же, имя отчета в обеих папках не совпадает. Позвольте мне дать примерное название отчетов, которые у меня есть в двух разных папках :

Папка1
C:\Users\kaushasu\Desktop\Test1\F12162-AE EBA2.9-XLS-QA-BF - AE CRD F32.01

Папка2
C:\Users\kaushasu\Desktop\Test2\F12162-AE EBA2.9-отменить-ОК - ае КРД F32 из.01

Sunil KK

Надеюсь, я объяснил, что хочу сделать

Maciej Los

Что касается меня... нет, я не знаю, что именно pec.jar программное обеспечение возвращается.

Sunil KK

pec.jar возвращает сравниваемый результат в формате excel. этот инструмент окрашивает ячейку в желтый цвет, если значение не совпадает с листом сравнения.

1 Ответов

Рейтинг:
11

Maciej Los

Похоже, ваш код неполон, потому что вы должны сравнить каждый файл в папке 1 со всеми файлами в папке 2. Видеть: Декартово произведение[^].
В псевдокоде:

Set "PECfolder=C:\SunilKK-Latitude-E6430s\SunilKK\Software\PreciseExcelComparator\v1.1\PreciseExcelComparator_PEC"
Set "PECfile=pec.jar"

REM ... some lines were skipped

FOR /f "delims=" %%f1 IN ("%Masterfolder1%\*.xls") DO (
    FOR /f "delims=" %%f2 IN ("%Masterfolder2%\*.xls") DO (
        REM compare last 5 characters + ".xls" of file
        IF %f1:~-9% == %f2:~-9%
                call java -jar %PECfolder%\%PECFile% %f1% %f2% 0 0
    )
)


Sunil KK

Привет Мацей,

Мне не нужно сравнивать каждый файл в папке 1 со всеми файлами в папке 2

Я должен сравнить файл типа report1 с report1 и report2=report2, report3=report3. Поскольку имя отчета не совпадает в обеих папках. Итак, я предполагаю, что в обеих папках последовательность файлов одинакова.

Maciej Los

Но вы упомянули, что имена файлов могут отличаться друг от друга. Общая часть файлов - это шаблон. Итак, я предполагаю, что вы должны сравнить каждый файл в одной папке со всеми файлами во второй папке. Если часть имени файла одинакова в обеих папках, вы должны добавить еще одно условие, но логика все равно остается той же.

Sunil KK

Да, как я уже упоминал в комментариях, у меня есть имя файла таким образом :

Папка1
C:\Users\kaushasu\Desktop\Test1\F12162-AE EBA2.9-XLS-QA-BF - AE CRD F32.01

Папка2
C:\Users\kaushasu\Desktop\Test2\F12162-AE EBA2.9-отменить-ОК - ае КРД F32 из.01

вот почему я ищу помощь, чтобы получить имя файла для PEC.jar в качестве параметров

Sunil KK

не могли бы вы просто помочь мне получить имена файлов в обеих папках по одному и выполнить их с помощью pec.jar, это было бы похоже на :

вызов Java -банку C:\PreciseExcelComparator\PEC.jar "C:\Users\kaushasu\Desktop\Test1\F12162-AE EBA2.9-отменить-ОК-БФ - КРД F32.01.xls ае" "C:\Users\kaushasu\Desktop\Test2\F12162-AE EBA2.9-отменить-ОК - ае КРД F32 из.01" 0 0

вызов Java -банку C:\PreciseExcelComparator\PEC.jar "C:\Users\kaushasu\Desktop\Test1\F12162-AE EBA2.9-отменить-ОК-БФ - КРД F32.02.xls ае" "C:\Users\kaushasu\Desktop\Test2\F12162-AE EBA2.9-отменить-ОК - ае КРД F32 из.02" 0 0

вызов Java -банку C:\PreciseExcelComparator\PEC.jar "C:\Users\kaushasu\Desktop\Test1\F12162-AE EBA2.9-отменить-ОК-БФ - F32.03.xls КРД ае" "C:\Users\kaushasu\Desktop\Test2\F12162-AE EBA2.9-отменить-ОК - ае КРД F32 из.03" 0 0

это должно выполняться в цикле.

Sunil KK

Здравствуйте, Мацей Лос, могу ли я объяснить ?

Maciej Los

Кажется, вы хотите сравнить последние 5 символов имен файлов. Если они совпадают, вы хотите позвонить pec.jar файл с аргументами.
Проверить это: переменная подстрока - Windows CMD - SS64.com[^]. Это может помочь вам сравнить последние 5 символов в именах файлов.
[РЕДАКТИРОВАТЬ]
См. обновленный ответ.

Sunil KK

Спасибо Мацей за ссылку. Ну, я хочу создать универсальный пакетный файл, который может быть использован и другим пользователем. Просто помогите мне добавить еще один цикл в мой код, чтобы получить имя файла из папки folder2. отдыхай, я сделаю это. Потому что я создал этот код, взяв ссылку на многие коды с помощью google :). честно говоря, я не так уж хорошо разбираюсь в пакетном кодировании.

Maciej Los

Я тоже не специалист. Я играл с пакетными файлами несколько лет назад. Теперь я предпочитаю играть с c#...

Если мой ответ был полезен, можете ли вы принять его (зеленая кнопка - формально удалить ваш вопрос из списка без ответа)?