Batch File: ( tidak terduga saat ini
Saya mendapatkan kesalahan ini:
( tidak terduga saat ini
Kesalahan terjadi setelah menerima nilai a. Saya mencoba dan memeriksa nilai null yang dapat menyebabkan masalah seperti itu,, tetapi tidak berhasil.
echo off
cls
title ~USB Wizard~
echo What do you want to do?
echo 1.Enable/Disable USB Storage Devices.
echo 2.Enable/Disable Writing Data onto USB Storage.
echo 3.~Yet to come~.
set "a=%globalparam1%"
goto :aCheck
:aPrompt
set /p "a=Enter Choice: "
:aCheck
if "%a%"=="" goto :aPrompt
echo %a%
IF %a%==2 (
title USB WRITE LOCK
echo What do you want to do?
echo 1.Apply USB Write Protection
echo 2.Remove USB Write Protection
::param1
set "param1=%globalparam2%"
goto :param1Check
:param1Prompt
set /p "param1=Enter Choice: "
:param1Check
if "%param1%"=="" goto :param1Prompt
if %param1%==1 (
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies\ /v WriteProtect /t REG_DWORD /d 00000001
echo USB Write is Locked!
)
if %param1%==2 (
REG ADD HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\StorageDevicePolicies\ /v WriteProtect /t REG_DWORD /d 00000000
echo USB Write is Unlocked!
)
)
pause
14
3
Anda mendapatkan error tersebut karena ketika pernyataan
param1
jika dievaluasi, param selalu null karena menjadi variabel cakupan tanpa perluasan tertunda.Ketika tanda kurung digunakan, semua perintah dan variabel di dalam tanda kurung tersebut diperluas. Dan pada saat itu, param1 tidak memiliki nilai yang membuat pernyataan if tidak valid. Ketika menggunakan ekspansi tertunda, variabel-variabel hanya diperluas ketika perintah benar-benar dipanggil.
Saya juga merekomendasikan menggunakan perintah
if not defined
untuk menentukan apakah sebuah variabel sudah diset.Oh, sayang. Beberapa masalah kecil...
Seperti yang ditunjukkan oleh orang lain, anda perlu mengutip untuk melindungi entri yang kosong/berisi spasi, dan gunakan fasilitas !delayed_expansion!
Dua hal lain yang harus Anda ketahui:
Pertama,
set/p
akan memberikan nilai masukan pengguna ke sebuah variabel. Itu bukan berita baru - tetapi yang menjadi masalah adalah menekanenter
sebagai respon akan membiarkan variabel TIDAK BERUBAH - tidak akan MENGASOSIASI string dengan panjang nol ke variabel (sehingga menghapus variabel dari lingkungan.) Metode yang aman adalah:Itu, tentu saja, jika Anda tidak ingin
enter
untuk mengulang nilai yang sudah ada.Bentuk lain yang berguna adalah
atau
(yang meminta dengan nilai default;
!var!
jika dalam pernyataan blok dengan delayedexpansion)Masalah kedua adalah bahwa pada beberapa versi Windows (meskipun W7 tampaknya "memperbaiki &" masalah ini) label APAPUN - termasuk
:: komentar
(yang merupakan label rusak) akan mengakhiri 'blok' - yaitu, pernyataan majemuk bertanda kurung)Anda perlu tanda kutip ganda di ketiga pernyataan
jika
Anda, misalnya .: