2015-07-10 1 views
2

Мне нужно выполнить поиск по файлу и получить результат, но с помощью нового окна.Используйте цикл «для» в новом окне, используя «СТАРТ»

Если я запустил цикл «за», а команда «СТАРТ» получала правильные результаты, но когда я открываю процесс в новых окнах, результаты ошибочны.

Start "" /Min Cmd.exe /C For /f "tokens=1,2,3" %%a in (file.txt) do (
set value1=%%a 
set value2=%%b 
) 
echo. %value1% 
echo. %value2% 

Это то, что я получаю в результате:

%a 
%b 
+0

Я не пробовал, но вы, вероятно, хотите '% a' и т. Д. Вместо' %% a'. Без 'start' вам понадобится удвоенный процент (предполагая, что вы вызываете это из файла' .BAT'), но когда вы используете 'start' _it_, не будет запущен пакетный файл, он будет запускать прямой команда, поэтому нужно только один процент. Вам _may_ также нужно потерять круглые скобки и все на одной строке: что-то вроде ',,, установить« value1 = %% a »&& set« value2 = %% b »' – TripeHound

+1

То, что вы пытаетесь, нелогично. Вы должны объяснить, какова ваша конечная цель (почему вы пытаетесь запустить FOR через START). Очень хорошо может быть простое решение, совершенно иное, чем то, что вы пытаетесь сделать. – dbenham

ответ

0

Я не уверен, чего вы ожидаете.

Возможность 1) - Вы хотите, чтобы инструкции ECHO запускались в родительском пакетном скрипте, отображая результат команды FOR/F, которая была запущена в другом окне.

Этого просто не может быть сделано. Вы не можете выполнить команду FOR в одном окне и обработать итерации (часть DO) в другом окне.

Кроме того, если вам удастся запустить весь цикл FOR в другом окне, любые установленные вами переменные будут полностью отделены от родительской пакетной среды. Ваш родительский пакетный скрипт не будет иметь доступа к переменным из другого окна.

Возможность 2) - Вы хотите, чтобы все (включая инструкции ECHO) запускалось в новом окне.

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

Вы должны поместить весь «скрипт» как одну строку, которая передается в качестве параметра команде CMD/C. Котировка и побег могут быстро стать сложными. Вся строка будет разобрана за один проход, поэтому вам понадобится дочернее окно для использования замедленного расширения. Но циклы FOR будут повреждены, если включено замедленное расширение, а контент включает !. Вы не можете включать и выключать замедленное расширение в цикле, потому что новое окно имеет контекст командной строки, а не пакетный, поэтому команда SETLOCAL ENABLEDELAYEDEXPANSION не работает.

Я не вижу, какая возможная цель это служит, но будет выполняться следующее с ограничением, что значения, содержащие !, будут повреждены. Мне пришлось добавить команду PAUSE, чтобы у вас была возможность увидеть результат.

start "" /min cmd.exe /v:on /c "(for /f "tokens=1,2" %%a in (file.txt) do @set "value1=%%a"&set "value2=%%b")&echo(!value1!&echo(!value2!&pause" 
+0

Спасибо за ваш ответ dbenham, - Если я не могу представить результат в родительском пакетном скрипте, тогда «СТАРТ» не то, что ищу. Тогда я отправлю новый вопрос. Дайте мне знать, если вы можете помочь. Вопрос: Ускорение чтения результатов в пакетном скрипте. – Panikosagros

0

При использовании для цикла в файле летучей мыши вы должны удвоить %%. Из командной строки (это ваш случай ... с момента запуска нового экземпляра CMD.exe) используйте только один%. Измените оба значения %% a на% a и %% b на% b, и он будет работать.

+0

Нет, команда START находится в пакетном скрипте, поэтому проценты должны быть удвоены. К моменту выполнения команды FOR в новом окне двойные проценты будут составлять один процент.Проблема полностью не связана с удвоением процентов. – dbenham

Смежные вопросы