我有一段代码可以从数组中循环,但是最终 goto在这个时候出乎意料。怎么了?
@echo off
set len = 3
set obj[0].Name = Joe
set obj[0].ID = 1
set obj[1].Name = Mark
set obj[1].ID = 2
set obj[2].Name = Mohan
set obj[2].ID = 3
set i = 0
:loop
if %i% equ %len% goto :eof
set cur.Name=
set cur.ID=
for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do (
set cur.%%k=%%l
)
echo Name = %cur.Name%
echo Value = %cur.ID%
set /a i = %i%+1
goto loop
按如下所示删除这些空间后:
@echo off
set len=3
set obj[0].Name=Joe
set obj[0].ID=1
set obj[1].Name=Mark
set obj[1].ID=2
set obj[2].Name=Mohan
set obj[2].ID=3
set i=0
:loop
if %i% equ %len% goto :eof
set cur.Name=
set cur.ID=
for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do (
set cur.%%k=%%l
)
echo Name=%cur.Name%
echo Value=%cur.ID%
set /a i=%i%+1
goto loop
我得到了这些结果
???
使用obj [%i%]之后,以下代码:
@echo off
set len=3
set obj[0].Name=Joe
set obj[0].ID=1
set obj[1].Name=Mark
set obj[1].ID=2
set obj[2].Name=Mohan
set obj[2].ID=3
set i=0
:loop
if %i% equ %len% goto :eof
set cur.Name=%obj[%i%].Name%
set cur.ID=%obj[%i%].ID%
for /f "usebackq delims==.tokens=1-3" %%j in (`set obj[%i%]`) do (
set cur.%%k=%%l
)
echo Name=%cur.Name%
echo Value=%cur.ID%
set /a i=%i%+1
goto loop
得到以下结果
答案 0 :(得分:0)
我删除了“ set”等号周围的空格:
@echo off
set /a len=3
set obj[0].Name=Joe
set obj[0].ID=1
set obj[1].Name=Mark
set obj[1].ID=2
set obj[2].Name=Mohan
set obj[2].ID=3
set /a i=0
:loop
if "%i%" equ "%len%" goto :eof
set cur.Name=
set cur.ID=
for /f "usebackq delims==. tokens=1-3" %%j in (`set obj[%i%]`) do (
set cur.%%k=%%l
)
echo Name=%cur.Name%
echo Value=%cur.ID%
set /a i=%i%+1
goto loop
:eof
输出看起来像:
Name=Joe
Value=1
Name=Mark
Value=2
Name=Mohan
Value=3
答案 1 :(得分:0)
我个人建议使用以下更简单的代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import javax.jms.ConnectionFactory;
import javax.jms.JMSContext;
import javax.jms.JMSException;
import javax.jms.JMSProducer;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.Queue;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class Main implements MessageListener{
public static void main(String[] args) throws JMSException,NamingException, IOException{
if(args.length!=3) System.out.println("usage: username subscribe-to-queue publish-to-queue");
else {
String username = args[0];
System.out.println("username: " + username + " | subscribe-to-queue-name " + args[1] + " | publish-to-queue-name " + args[2]);
Context initialContext = Main.getInitialContext();
Main myMain = new Main();
System.out.println("Before Queue");
Queue queue01 = (Queue) initialContext.lookup(args[1]);
Queue queue02 = (Queue) initialContext.lookup(args[2]);
//java:comp/DefaultJMSConnectionFactory is the default conection at the JMS app server (no need to define it)
System.out.println("Before ConnectionFactory");
JMSContext jmsContext = ((ConnectionFactory) initialContext.lookup("java:comp/DefaultJMSConnectionFactory")).createContext();
//we use jms context to pickup jms consumer and assign it our own class (Main)
System.out.println("Before createConsumer");
jmsContext.createConsumer(queue01).setMessageListener(myMain);
System.out.println("Before jmsProducer");
JMSProducer jmsProducer = jmsContext.createProducer();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
String msgToSend = null;
System.out.println("Before while");
while(true) {
System.out.println("Please enter msg:");
msgToSend = bufferedReader.readLine();
if(msgToSend.equalsIgnoreCase("exit")) {
jmsContext.close();
System.exit(0);
}else {
System.out.println("Before send");
jmsProducer.send(queue02, "["+username+": "+msgToSend+"]");
System.out.println("after send");
}
}
}
}
@Override
public void onMessage(Message message) {
try{System.out.println(message.getBody(String.class));}
catch (JMSException e) {e.printStackTrace();}
}
public static Context getInitialContext () throws JMSException,NamingException
{
Properties prop = new Properties();
prop.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
prop.setProperty("java.naming.factory.url.pkgs", "org.jnp.interfaces");
prop.setProperty("java.naming.provider.url", "jnp://localhost:3700");
Context context = new InitialContext(prop);
//Context context = new InitialContext();
return context;
}
}
这样输出将是:
@echo off
setlocal EnableDelayedExpansion
set "obj[0].Name=Joe"
set "obj[0].ID=1"
set "obj[1].Name=Mark"
set "obj[1].ID=2"
set "obj[2].Name=Mohan"
set "obj[2].ID=3"
:loop
for /L %%A IN (0 1 2) do (
for /F "delims=. tokens=2" %%B in ('set obj[%%A] ^| sort /R') do (
set "output=%%B"
echo !output:ID=Value!
)
)