2014-10-07 2 views
-1

У меня есть два файла и вы хотите проверить, содержит ли один из них в пакетном скрипте. По 'contains' я имею в виду, что SET строк в первом файле содержит SET строк во втором файле.Задайте операции в пакетных файлах

Например этот файл:

a 
b 
c 
d 
e 
f 
g 

содержит этот файл:

a 
b 
d 
g 

, но не содержит этот файл:

a 
b 
z 

Я понимаю, что эта задача не очень сложная но я задаюсь вопросом, существует ли инструмент командной строки, который поддерживает операции с подобъектами из коробки. Например, в качестве альтернативы для написания цикла, который ищет строку из второго файла в первом файл ...

+1

Пакетные файлы часто используют контекст в файлах, используемых наборах символов и нуждаются в специальной обработке, если существуют ядовитые символы. Ваш пример ничего не показывает о фактической задаче или составе файлов. – foxidrive

+0

Другими словами, пожалуйста, дайте нам несколько, более подробных примеров вашей ситуации. Также предоставьте код, который вы пробовали до сих пор – Monacraft

+0

@foxidrive, я не упоминал об этом, потому что здесь нет никаких проблем. Файлы кодируются ascii. – Vitaliy

ответ

1

редактируемого большой части кода в исходном сообщении не требуется, поэтому ...

с вашим набором файлов, по имени (в том же порядке) fullList.txt, list1.txt и list2.txt, это должно работать

@echo off 
    setlocal enableextensions disabledelayedexpansion 

    set "mainFile=.\fullList.txt" 

    for %%f in (list*.txt) do (
     findstr /l /x /v /g:"%mainFile%" "%%~ff" >nul && ( 
      echo %%f is not included 
     ) || ( 
      echo %%f is included 
     ) 
    ) 

Как это работает? Это всего лишь команда findstr для каждого файла. Он ищет файл «маленький список» для строк, не содержащихся в файле «большой список». Если строка найдена, файл не содержится, иначе он содержится

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
PUSHD "%sourcedir%" 
SET "is_subset=Y" 
FOR /f "delims=" %%a IN (subset_file.txt) DO (
FIND "%%a" "superset_file.txt">NUL 
IF ERRORLEVEL 1 ECHO fail ON "%%a"&SET "is_subset=N"&GOTO done 
) 
:done 
POPD 
ECHO subset IN superset : %is_subset% 

GOTO :EOF 

Это должно работать - но ваш вопрос остается неясным. Это проверит, что надмножество содержит каждый член подмножества, но вы можете найти пользователей.

Я использовал тестовые файлы на своем накопителе U: - вам нужно будет изменить его.

0

Решение ниже решает проблему очень быстро. В качестве дополнительных данных он отображает строки из небольшого файла, не содержащегося в большом файле:

@echo off 
setlocal 

for /F "delims=" %%a in (smallFile.txt) do set "line[%%a]=1" 
for /F "delims=" %%a in (largeFile.txt) do set "line[%%a]=" 
set "anyLine=" 
for /F %%a in ('set line[ 2^>NUL') do set "anyLine=1" 
if defined anyLine (
    echo Large file does NOT "contain" the small file. Lines not contained: 
    echo/ 
    for /F "tokens=2 delims=[]" %%a in ('set line[') do echo %%a 
) else (
    echo Large file "contain" the small file. 
) 
Смежные вопросы