/ era inaspettato in questo momento


1

Sto ottenendo "/ era inaspettato in questo momento." mentre usi il ciclo for sotto solo per alcuni casi.

for /f "tokens=1,* delims=;" %%m in (file.txt) do (
    echo Inside Loop
    echo %%m
)

Sto chiamando questo file batch da un altro file batch in un ciclo. Quindi ogni volta, il contenuto del file.txt deve essere modificato.

Il contenuto del file è un problema?

Questo è lo script completo:

echo off
SET FileName=%2
SET NUM=%3
:label
echo.
echo Parsing file.txt file
for /f "tokens=1,* delims=;" %%m in (file.txt) do (     
    echo Inside Loop
            SetLocal EnableDelayedExpansion
    echo %%n
    SET str=%%m     
    SET "Number=!str::="^&REM #!
    IF "!NUM!"=="" SET NUM="!number!"       
    if !number! GEQ !NUM! (
        if /I not "!str:(ind)=!"=="!str!" (
                echo It contains IND
        ) else >>"!FileName!" echo %1;!str!

    echo %%n>Label_Name.txt
    goto label 
    )
    endlocal
)
:end

Questo non può essere il codice che causa l'errore. Il contenuto non può innescare alcun errore in questa parte del codice.
jeb,

hai installato cygwin?

@Dewfy. nessun cygwin non installato

Risposte:


1

Senza alcuna idea del contenuto del tuo file o dei parametri su cui stai eseguendo questo batch, è pura supposizione, ma sospetto che questa riga:

IF "!NUM!"=="" SET NUM="!number!"       

che verrà impostato NUMsu un valore tra virgolette.

Il codice forse migliore sarebbe

if not defined num set "num=!number!"

ma anche - stai utilizzando un ambito GOTO labelentro il SETLOCAL enabledelayedexpansionquale AFAIAA NON termina l' LOCALambiente, quindi tutta l'elaborazione successiva sarà con SETLOCALe delayedexpansionin vigore. È possibile rieseguire SETLOCAL Enable...più volte, costruendo una sempre maggiore profondità dell'ambiente locale .... Migliore IMHO fisso.


È corretto, il multiplo Setlocalcomporterà un errore di overflow
jeb

scusa I parametri sono,% 1: svn: //10.0.9.68: 6140 / Projects / W83627 (HFG) /,% 2: Tempfile.txt,% 3: 956. e se commento ") altrimenti >>! Nome file! echo% 1;! str! " questa linea. funziona ... non so perché
user1553605

Questo è comprensibile. Una parentesi di chiusura deve essere sfuggita se non è correlata alla sintassi di un comando - quindi (ind)la parentesi di chiusura può essere interpretata come la fine di do (per esempio. Prova ^)in questa situazione, che dice 'letterale, non speciale significato di ")" `Tuttavia, il SETLOCALproblema che ho citato deve essere risolto. Migliore per EDITi nuovi dati (parametri) nella tua domanda, dove sono più facili da associare e possono essere formattati meglio. Sii anche un'idea per incollare un esempio di file.txt- dicci dove si verifica il problema di elaborazione.
Magoo,

0

prova questo:

@echo off&setlocal
for /f "tokens=1,* delims=;" %%m in (file.txt) do (
    set "line=%%m"
    echo Inside Loop
    setlocal enabledelayedexpansion
    echo !line!
    endlocal
)

0

solo per alcuni casi

Potrebbe essere utile sapere di più su cosa siano questi casi. Senza ulteriori dettagli, la domanda (nella sua forma attuale) è altamente soggetta a risposte che implicano la speculazione.

Eccone uno, ad esempio:

Se digiti FOR /?, Troverai che / F è descritto nella sezione che dice:

Se le estensioni di comando sono abilitate, sono supportate le seguenti forme aggiuntive del comando FOR:

Secondo la documentazione CMD , l'esecuzione di CMD / E: ON abiliterà le estensioni della riga di comando. Quindi, la documentazione di terze parti rileva che l'esecuzione di CMD / Y può essere utilizzata per disabilitare le estensioni di comando all'interno di CMD (e CMD / X può essere utilizzato per riattivare).

Quindi, se scopri che l'esecuzione di un file batch funziona in alcuni casi, ma "FOR / F" non sembra riconoscere l'opzione in altri casi, il problema potrebbe non essere causato dall'effettivo codice sorgente che stai citando. Il problema potrebbe essere causato dall'ambiente che esegue il codice.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.