Pertanyaan File batch termasuk file eksternal untuk variabel


Saya memiliki file batch dan saya ingin memasukkan file eksternal yang berisi beberapa variabel (katakanlah variabel konfigurasi). Apa itu mungkin?


76
2018-05-04 08:41


asal


Jawaban:


catatan: Saya mengasumsikan Windows batch file karena kebanyakan orang tampaknya tidak menyadari bahwa ada perbedaan yang signifikan dan hanya secara membabi buta memanggil semuanya dengan teks abu-abu pada latar belakang DOS hitam. Namun demikian, varian pertama harus bekerja di DOS juga.

Konfigurasi yang bisa dijalankan

Cara termudah untuk melakukan ini adalah dengan hanya memasukkan variabel dalam file batch itu sendiri, masing-masing dengan sendirinya set pernyataan:

set var1=value1
set var2=value2
...

dan di batch utama Anda:

call config.cmd

Tentu saja, itu juga memungkinkan variabel dibuat secara kondisional atau tergantung pada aspek sistem, jadi itu cukup serbaguna. Namun, kode arbitrer dapat berjalan di sana dan jika ada kesalahan sintaks, maka batch utama Anda juga akan keluar. Di dunia UNIX ini tampaknya cukup umum, terutama untuk cangkang. Dan jika Anda memikirkannya, autoexec.bat tidak ada yang lain.

Pasangan kunci / nilai

Cara lain akan menjadi semacam itu var=value pasang dalam file konfigurasi:

var1=value1
var2=value2
...

Anda kemudian dapat menggunakan cuplikan berikut untuk memuatnya:

for /f "delims=" %%x in (config.txt) do (set "%%x")

Ini memanfaatkan trik serupa seperti sebelumnya, yaitu hanya menggunakan set di setiap baris. Kutipan ada di sana untuk melarikan diri dari hal-hal seperti itu <, >, &, |. Namun, mereka sendiri akan memutuskan kapan kutipan digunakan dalam input. Anda juga harus berhati-hati saat memproses lebih lanjut data dalam variabel yang disimpan dengan karakter tersebut.

Secara umum, secara otomatis melarikan diri dari masukan yang sewenang-wenang menyebabkan tidak ada sakit kepala atau masalah dalam file batch tampaknya sangat tidak mungkin bagi saya. Setidaknya saya belum menemukan cara untuk melakukannya. Tentu saja, dengan solusi pertama Anda mendorong tanggung jawab itu kepada orang yang menulis file konfigurasi.


103
2018-05-04 08:47



Jika file konfigurasi eksternal juga merupakan file batch yang valid, Anda bisa menggunakan:

call externalconfig.bat

di dalam skrip Anda. Coba buat berikut a.bat:

@echo off
call b.bat
echo %MYVAR%

dan b.bat:

set MYVAR=test

Menjalankan a.bat harus menghasilkan keluaran:

test

29
2018-05-04 08:48



Batch menggunakan kurang dari dan lebih besar dari kurung sebagai input dan output pipa.

>file.ext

Hanya menggunakan satu braket output seperti di atas akan menimpa semua informasi dalam file itu.

>>file.ext

Menggunakan braket kanan ganda akan menambahkan baris berikutnya ke file.

(
echo
echo
)<file.ext

Ini akan mengeksekusi parameter berdasarkan garis-garis file. Dalam hal ini, kami menggunakan dua baris yang akan diketik menggunakan "echo". Bracket kiri menyentuh kurung kurung kanan berarti bahwa informasi dari file tersebut akan disalurkan ke dalam garis tersebut.

Saya telah mengkompilasi file baca / tulis contoh saja. Di bawah ini adalah file dibagi menjadi beberapa bagian untuk menjelaskan apa yang dilakukan setiap bagian.

@echo off
echo TEST R/W
set SRU=0

SRU bisa menjadi apa saja dalam contoh ini. Kami sebenarnya mengaturnya untuk mencegah crash jika Anda menekan Enter terlalu cepat.

set /p SRU=Skip Save? (y): 
if %SRU%==y goto read
set input=1
set input2=2
set /p input=INPUT: 
set /p input2=INPUT2: 

Sekarang, kita perlu menulis variabel ke file.

(echo %input%)> settings.cdb
(echo %input2%)>> settings.cdb
pause

Saya menggunakan .cdb sebagai bentuk singkat untuk "Command Database". Anda dapat menggunakan ekstensi apa pun. Bagian selanjutnya adalah menguji kode dari awal. Kami tidak ingin menggunakan variabel set yang dijalankan di awal file, kami benar-benar ingin mereka memuat DARI pengaturan.cdb kami hanya menulis.

:read
(
set /p input=
set /p input2=
)<settings.cdb

Jadi, kami hanya menyisipkan dua baris pertama informasi yang Anda tulis di awal file (yang Anda punya pilihan untuk melewati pengaturan garis untuk memeriksa untuk memastikan itu berfungsi) untuk mengatur variabel input dan input2.

echo %input%
echo %input2%
pause
if %input%==1 goto newecho
pause
exit

:newecho
echo If you can see this, good job!
pause
exit

Ini menampilkan informasi yang telah diatur ketika pengaturan. Cdb disalurkan ke dalam kurung. Sebagai motivator yang bekerja dengan baik, menekan enter dan menetapkan nilai default yang kita atur sebelumnya sebagai "1" akan mengembalikan pesan pekerjaan yang baik. Menggunakan pipa braket berjalan dua arah, dan jauh lebih mudah daripada mengatur hal "UNTUK". :)


2
2017-07-23 20:29



Jadi Anda hanya harus melakukan ini dengan benar ?:

@echo off
echo text shizzle
echo.
echo pause^>nul (press enter)
pause>nul

REM writing to file
(
echo XD
echo LOL
)>settings.cdb
cls

REM setting the variables out of the file
(
set /p input=
set /p input2=
)<settings.cdb
cls

REM echo'ing the variables
echo variables:
echo %input%
echo %input2%
pause>nul

if %input%==XD goto newecho
DEL settings.cdb
exit

:newecho
cls
echo If you can see this, good job!
DEL settings.cdb
pause>nul
exit

1
2017-09-27 16:04



:: savevars.bat
:: Use $ to prefix any important variable to save it for future runs.

@ECHO OFF
SETLOCAL

REM Load variables
IF EXIST config.txt FOR /F "delims=" %%A IN (config.txt) DO SET "%%A"

REM Change variables
IF NOT DEFINED $RunCount (
    SET $RunCount=1
) ELSE SET /A $RunCount+=1

REM Display variables
SET $

REM Save variables
SET $>config.txt

ENDLOCAL
PAUSE
EXIT /B

Keluaran:

$ RunCount = 1

$ RunCount = 2

$ RunCount = 3

Teknik yang diuraikan di atas juga dapat digunakan untuk membagi variabel di antara beberapa file batch.

Sumber: http://www.incodesystems.com/products/batchfi1.htm


0
2017-11-25 05:26



Jangan lupakan parameter lama yang bagus. Ketika memulai file * .bat atau * .cmd Anda dapat menambahkan hingga sembilan parameter setelah nama file perintah:

call myscript.bat \\path\to\my\file.ext type
call myscript.bat \\path\to\my\file.ext "Del /F"

Contoh skrip

Myscript.bat bisa seperti ini:

@Echo Off
Echo The path of this scriptfile %~0
Echo The name of this scriptfile %~n0
Echo The extension of this scriptfile %~x0
Echo.
If "%~2"=="" (
   Echo Parameter missing, quitting.
   GoTo :EOF
)
If Not Exist "%~1" (
   Echo File does not exist, quitting.
   GoTo :EOF
)
Echo Going to %~2 this file: %~1
%~2 "%~1"
If %errorlevel%  NEQ 0 (
   Echo Failed to %~2 the %~1.
)
@Echo On

Contoh keluaran

c:\>c:\bats\myscript.bat \\server\path\x.txt type
The path of this scriptfile c:\bats\myscript.bat
The name of this scriptfile myscript
The extension of this scriptfile .bat

Going to type this file: \\server\path\x.txt
This is the content of the file:
Some alphabets: ABCDEFG abcdefg
Some numbers: 1234567890

c:\>c:\bats\myscript.bat \\server\path\x.txt "del /f "
The path of this scriptfile c:\bats\myscript.bat
The name of this scriptfile myscript
The extension of this scriptfile .bat

Going to del /f  this file: \\server\path\x.txt

c:\>

-1
2018-04-27 12:11



Saat mencoba menggunakan metode dengan konfigurasi excutable Saya melihat bahwa itu mungkin berhasil atau TIDAK BISA bekerja tergantung di mana di skrip berada panggilan:

panggil config.cmd

Aku tahu itu tidak masuk akal, tapi bagiku itu fakta. Ketika "memanggil config.cmd" terletak di bagian atas skrip, ia bekerja, tetapi jika lebih lanjut di skrip tidak.

Dengan tidak berfungsi, maksud saya variabel tidak disetel un skrip panggilan.

Sangat aneh !!!!


-2
2018-05-25 23:49