File batch tidak mengembalikan nilai yang benar setelah menggunakan bat untuk exe

1

Saya mengalami banyak masalah dengan skrip ini. Seharusnya membaca file (yang ditentukan pengguna) lalu menyimpannya ke storeresult variabel lingkungan.

Saya menggunakan konverter BAT To EXE yang tidak mempengaruhi perintah batch, jadi bukan itu. (Hanya jika Anda bertanya-tanya mengapa saya menelepon storvar dari pada storvar.bat )

Naskah utama ( storvar.exe ):

set a=%~1
set b=%~2
set c=%~3
for /f "delims=" %%a in (stor\%a%.stor) do set storeresult=%%a
pause

Skrip yang saya gunakan untuk memanggil skrip (Tidak ada kesalahan saat memanggil):

storevar Hi hi
pause
echo %storeresult%
pause

Ketika saya menyebutnya, itu hanya mengembalikan hasilnya ( %storeresult% ) karena tidak ada, saya tidak dapat menemukan masalah!

ZeekPlayz
sumber
Apa yang ada di stor\Hi.stor? Di mana Anda menulis file ini? Harap tunjukkan semua kode Anda jika Anda mengharapkan jawaban.
DavidPostill
Apakah itu berfungsi sebelum Anda menggunakan konverter kelelawar untuk exe?
Mokubai
Tidak, jawaban Armada Perintah membantu saya.
ZeekPlayz
Pertama-tama, selamat datang di Pengguna Super! Ketika Anda sudah terbiasa dengan komunitas, mungkin lebih baik mencurahkan beberapa menit untuk membaca tutorial bagian Bantuan. Misalnya, jika benar jawaban Armada membantu Anda, yang berikut ini mungkin berlaku: Apa artinya ketika sebuah jawaban "diterima"?
Run5k

Jawaban:

0

Saat Anda mencoba mendefinisikan dan menggunakan variabel, Anda harus selalu memperhatikan variabelnya cakupan .

Variabel lingkungan yang Anda tentukan menggunakan set perintah hanya valid dalam lingkup proses di mana mereka didefinisikan. Mudah dibuktikan dengan eksperimen:

  1. Buka satu Prompt Perintah dan cobalah untuk mendefinisikan set a = b. Menggunakan set untuk memverifikasi bahwa itu didefinisikan dengan benar.
  2. Sekarang, buka Command Prompt kedua dan aktifkan set. Kamu melihatnya a tidak didefinisikan dalam lingkup ini.

storvar.exe adalah proses yang terpisah. Karenanya, ia memiliki ruang lingkup tersendiri. Apapun variabel lingkungan yang Anda tetapkan di dalamnya tetap ada dan dihapus ketika keluar.

Jadi, adakah alternatif? Baiklah. Saya sendiri menggunakan PowerShell sebagai ganti file batch yang sudah usang; itu dapat mengekstrak hal-hal dari file dan langsung menggunakannya atau memancarkannya ke skrip berikutnya. (Microsoft secara resmi mendukung kompilasi PowerShell ke EXE, meskipun Anda juga dapat menemukan yang berorientasi pemula di TechNet Gallery.) AutoIt adalah alternatif lain.


sumber