【发布时间】:2022-10-08 23:37:31
【问题描述】:
我对这个 bat 文件的问题是我试图让最终用户选择使用 .bat 脚本阻止成人和赌博网站,我面临的问题是所有命令都一起运行,无论选择如何
有没有办法将它们分开,是否有更好的方法可以利用 C++ 程序来做到这一点?
#!/bin/bash
@ECHO OFF
CLS
TITLE = Block Adult and Gambling Windows by andgoedu
ECHO 1. Changing_hosts_file
ECHO 2. ChangingDNS_CloudFlare_Family_Win10
ECHO 3. ChangingDNS_CloudFlare_Family_Shield_Win_7
ECHO 4. Check_DNS_Servers
CHOICE /C 1234 /M "Enter your choice:"
:: Note - list ERRRORLEVELS in decreasing order
IF ERRORLEVEL 4 GOTO Check_DNS_Servers
IF ERRORLEVEL 3 GOTO CloudFlareDNS_Family_Shield_Win_7
IF ERRORLEVEL 2 GOTO DNS_CloudFlare_Family_Win10
IF ERRORLEVEL 1 GOTO hostsfile
GOTO START
:hostsfile
ECHO "Copying the original Windows Hosts file "
PAUSE
CD C:\Users\Public\Documents
MKDIR OriginalFile
CD
CD C:\Windows\System32\drivers\etc
XCOPY hosts C:\Users\Public\Documents\OriginalFile
ECHO "Your original hosts was copied To C:\Users\Public\Documents\OriginalFile"
PAUSE
ECHO "Deleting Old hosts file .............................................................."
DEL C:\Windows\System32\drivers\etc\hosts
ECHO "Deleting Old hosts file .............................................................."
XCOPY "%~dp0\hosts" "C:\Windows\System32\drivers\etc" /w
ECHO "Your Hosts File Was Changed SuccessFully"
PAUSE
CLS
;
GOTO END
GOTO START
:DNS_CloudFlare_Family_Win10
ECHO "Changing Search Engine Results to Safe Family (CloudFlare Family DNS)."
ECHO " Changing DNS Of This PC-Only Wifi..............................................................................."
netsh interface ipv4 set dns "Wi-Fi" static 185.228.168.168 primary
netsh interface ipv4 add dns "Wi-Fi" 185.228.169.168 index=2
netsh interface ipv6 set dns "Wi-Fi" static 2a0d:2a00:1:: primary
netsh interface ipv6 add dns "Wi-Fi" 2a0d:2a00:2:: index=2
ECHO " Changing DNS Of This PC-Only Ethernet ..............................................................."
netsh interface ipv4 set dns "Ethernet" static 185.228.168.168 primary
netsh interface ipv4 add dns "Ethernet" 185.228.169.168 index=2
netsh interface ipv6 set dns "Ethernet" static 2a0d:2a00:1:: primary
netsh interface ipv6 add dns "Ethernet" 2a0d:2a00:2:: index=2
netsh interface ipv4 set dns "Local Area Connection" static 185.228.168.168 primary
netsh interface ipv4 add dns "Local Area Connection" 185.228.169.168 index=2
netsh interface ipv6 set dns "Local Area Connection" static 2a0d:2a00:1:: primary
netsh interface ipv6 add dns "Local Area Connection" 2a0d:2a00:2:: index=2
ECHO " Changing DNS Of This PC-Only Local Area Connection.............................................."
ipconfig /flushdns
ipconfig /release
ipconfig /renew
ECHO "Restarted Network Adapters"
PAUSE
PROMPT
CLS
;
GOTO END
GOTO START
:CloudFlareDNS_Family_Shield_Win_7
ECHO "Windows 7 Ethernet"
netsh interface ip set dns "Wi-Fi" static 1.1.1.3 primary
netsh interface ip add dns "Ethernet" static 1.0.0.3 index=2
netsh interface ipv6 set dns "Wi-Fi" static 2a0d:2a00:1:: primary
netsh interface ipv6 add dns "Wi-Fi" 2606:4700:4700::1003 index=2
ECHO "Win7 Wifi"
netsh interface ip set dns "Wi-Fi" static 1.1.1.3 primary
netsh interface ip add dns "Wi-Fi" static 1.0.0.3 index=2
netsh interface ipv6 set dns "Wi-Fi" static 2a0d:2a00:1:: primary
netsh interface ipv6 add dns "Wi-Fi" 2606:4700:4700::1003 index=2
ipconfig /flushdns
ipconfig /release
ipconfig /renew
ECHO "Restarted Network Adapters"
ECHO "Check DNS Servers ?"
PAUSE
;
GOTO END
:Check_DNS_Servers
IPCONFIG /ALL
ECHO "CHECKOUT THE NEW DNS SERVERS DNS Servers"
PAUSE
;
GOTO END
【问题讨论】:
-
Bash 和批处理是完全不相关的语言。除了 Shebang,您还编写了一个批处理脚本。此外,标签只是路标,而不是障碍,所以没有什么可以告诉脚本不是继续前进。此外,标签不能包含空格,因此您创建了三个名为
:Changing的标签。 -
谢谢你我会改变命名我可以问你我将如何通过基本上正确地调用它来阻止它,因为我有命名错误我是正确的吗?
-
只有
goto中的第一个字符串是有效的,所以所有changing....标签都是相同的。批处理dimply逐行执行,直到达到goto、call、exit或物理文件结尾,所以它会简单地从:Changing (hosts file)运行到文件结尾,因为有在每个“部分”的末尾没有goto start。而且...标签start似乎不存在。 -
在为每个选项添加正确的命名和正确的开始和结束后现在可以使用
标签: batch-file cmd dns