Saya tidak terduga pada saat ini


1

Saya mendapatkan "Saya tidak terduga saat ini." saat menggunakan di bawah ini untuk loop untuk beberapa kasus saja.

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

Saya memanggil file batch ini dari file batch lain dalam satu lingkaran. Jadi setiap saat, konten file.txt harus diubah.

Apakah konten file bermasalah?

Ini skrip lengkap:

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

Ini bukan kode yang menyebabkan kesalahan. Konten tidak dapat memicu kesalahan apa pun di bagian kode ini.
jeb

sudahkah Anda menginstal cygwin?

@Dewfy. tidak ada cygwin yang tidak terpasang

Jawaban:


1

Tanpa indikasi konten file Anda atau parameter yang Anda jalankan batch ini, itu murni dugaan, tapi saya curiga baris ini:

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

yang akan diatur NUM ke nilai yang dikutip.

Mungkin kode yang lebih baik

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

tetapi juga - Anda menggunakan a GOTO label dalam a SETLOCAL enabledelayedexpansion yang AFAIAA TIDAK mengakhiri LOCAL lingkungan, maka semua pemrosesan sesudahnya akan dengan SETLOCAL dan delayedexpansion berlaku. Kemungkinan untuk mengeksekusi ulang SETLOCAL Enable... beberapa kali, membangun kedalaman yang lebih besar dan lebih besar dari lingkungan lokal .... IMHO diperbaiki terbaik.


Benar, banyak Setlocal akan menghasilkan kesalahan overflow
jeb

maaf Parameternya adalah,% 1: svn: //10.0.9.68: 6140 / Proyek / W83627 (HFG) /,% 2: Tempfile.txt,% 3: 956. dan jika saya komentar ") lagi & gt; & gt ;! Nama File! Echo% 1;! Str! " garis ini. ini bekerja ... saya tidak tahu mengapa
user1553605

Itu bisa dimengerti. Penutup-kurung perlu untuk melarikan diri jika itu tidak terkait dengan sintaks suatu perintah - jadi (ind) mungkin tanda kurung penutupnya ditafsirkan sebagai akhir dari do ( contohnya. Mencoba ^) dalam situasi ini, yang mengatakan 'literal, bukan arti khusus ")" `Namun demikian, SETLOCAL masalah yang saya sebutkan perlu diperbaiki. Terbaik untuk EDIT data baru (parameter) ke pertanyaan Anda, di mana mereka lebih mudah untuk dikaitkan dan dapat diformat lebih baik. Juga menjadi ide untuk menempelkan sampel file.txt - katakan di sekitar tempat pemrosesan masalah terjadi.
Magoo

0

coba ini:

@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

hanya untuk beberapa kasus

Mungkin bermanfaat untuk mengetahui lebih banyak tentang apa saja kasus-kasus itu. Tanpa perincian lebih lanjut, pertanyaan (dalam bentuk saat ini) sangat rentan terhadap jawaban yang melibatkan spekulasi.

Ini salah satunya, misalnya:

Jika Anda mengetik UNTUK / ?, Anda akan menemukan bahwa / F dijelaskan di bawah bagian yang mengatakan:

Jika Ekstensi Perintah diaktifkan, tambahan berikut ini bentuk perintah FOR didukung:

Menurut Dokumentasi CMD , menjalankan CMD / E: ON akan mengaktifkan ekstensi baris perintah. Kemudian, dokumentasi pihak ketiga mencatat bahwa menjalankan CMD / Y dapat digunakan untuk menonaktifkan ekstensi perintah dari dalam CMD (dan CMD / X dapat digunakan untuk mengaktifkan kembali).

Jadi jika Anda menemukan bahwa menjalankan file batch berfungsi dalam beberapa kasus, tetapi "UNTUK / F" tampaknya tidak mengenali opsi dalam kasus lain, masalahnya mungkin tidak disebabkan oleh kode sumber aktual yang Anda kutip. Masalahnya mungkin disebabkan oleh lingkungan yang menjalankan kode.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.