2013-09-03 4 views
1

Большинство примеров использования Windows Batch For Loop - это использование «IN».Windows Batch - для цикла - NOT IN

FOR %%A IN (1 2 3 4) DO ECHO %%A 

Мне нужно использовать NOT IN вместо этого. Когда я печатаю что-то как:

FOR %%A NOT IN (1 2 3 4) DO ECHO %%A 

В нем говорится: «В то время не ожидалось».

Благодаря

+1

Что * не * 1..4? 0 тогда 5..инфекция? Каково отношение к powershell? –

+0

Это просто пример. Я имел в виду, как использовать NOT IN. Я проверяю текстовые файлы, в которых перечислены имена файлов. спасибо – Bill

+0

AFAIK NOT недействителен с IN, вы можете установить переменную внутри IN, и если ее не установить после нее, ее NOT IN? –

ответ

0

в соответствии с вашими комментариями выше, вы хотите иметь «DIR без этих файлов»? Тогда это должно работать:

> тип donotuse.txt

alpha.txt 
beta.exe 
gamma.cmd 

> Тип t.bat

@dir /b | findstr /b /e /v /i /l /g:donotuse.txt 

> реж/б

albetade.txt 
alpha.exe 
alpha.txt 
beta.exe 
donotuse.txt 
gamma.cmd 
t.bat 

> т

albetade.txt 
alpha.exe 
donotuse.txt 
t.bat 

>

редактировать: dbenham прав. Добавлено /i /l в мой код.

+1

Очень близко, но вам нужна опция '/ L' для принудительной интерпретации имен вместо регулярного выражения. Вам также нужна опция '/ I' для принудительного совпадения регистра. В общем случае вы должны использовать '/ I' при работе с именами файлов Windows. Но в этом случае на самом деле критически важно избегать неприятной ошибки FINDSTR. См. [Почему этот пример FINDSTR с несколькими буквальными поисковыми строками не найден?] (Http://stackoverflow.com/q/8921253/1012053) – dbenham

0
for %%F in ('dir /b /a-d "somepath\*"^|findstr /vilxg:"exclusions.txt"') do echo %%F 

Поскольку в комментариях вы говорите, вы хотите переместить файлы, которые не в списке, вы должны попробовать использовать ROBOCOPY. Ознакомьтесь с параметрами /MOV и /XF. Это должно позволить вам делать именно то, что вы хотите в более прямом ключе. Введите robocopy /? из командной строки для справки. Существует множество вариантов навигации, поэтому для получения точного результата может потребоваться некоторое время. Но команда чрезвычайно мощная и стоящая.

0

Билл, это может делать то, что вам нужно, или дать вам подсказку ...

@echo off 
for /f "delims=" %%a in (' type "file.txt" ') do (
if not exist "c:\target\%%a" move "%%a" "c:\target" 
)