什么叫做脚本?如何使用脚本?再如如何制作脚本?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么叫做脚本?如何使用脚本?再如如何制作脚本?相关的知识,希望对你有一定的参考价值。
脚本英文为Script。实际上脚本就是程序,一般都是有应用程序提供的编程语言。应用程序包括浏览器(javascript、VBScript)、多媒体创作工具,应用程序的宏和创作系统的批处理语言也可以归入脚本之类。脚本(Script),就是含有bind和alias等命令的集合,你可以把这个集合存为一个独立的文件然后在需要的时候执行,这样就可以方便你在CS中的使用。
脚本文件同其他的区别
脚本同我们平时使用的VB、C语言的区别主要是:
1、脚本语法比较简单,比较容易掌握;
2、脚本与应用程序密切相关,所以包括相对应用程序自身的功能;
3、脚本一般不具备通用性,所能处理的问题范围有限。
脚本是批处理文件的延伸,是一种纯文本保存的程序,一般来说的计算机脚本程序是确定的一系列控制计算机进行运算操作动作的组合,在其中可以实现一定的逻辑分支等。
脚本程序相对一般程序开发来说比较接近自然语言,可以不经编译而是解释执行,利于快速开发或一些轻量的控制。
现在的脚本语言是比较多的,一般的脚本语言的执行只同具体的解释执行器有关,所以只要系统上有相应语言的解释程序就可以做到跨平台。
脚本存档
脚本可以存为后缀名为.cfg的文件放在cstrike文件夹下,执行时在控制台输入:exec(脚本文件名).cfg即可。比如将一个脚本存为buys.cfg文件,则在控制台中输入:execbuys.cfg则可以实现我们所需要的功能。要实现一个命令只要把这一过程定义(alias)好,并且分配一个键位给这个命令,以后只要按分配好的键位,就可以实现这一过程。所有的脚本都是通过这一方法实现的。 参考技术A 脚本script是使用一种特定的描述性语言,依据一定的格式编写的可执行文件,又称作宏或批处理文件。脚本通常可以由应用程序临时调用并执行。各类脚本目前被广泛地应用于网页设计中,因为脚本不仅可以减小网页的规模和提高网页浏览速度,而且可以丰富网页的表现,如动画、声音等。举个最常见的例子,当我们点击网页上的E-mail地址时能自动调用Outlook Express或Foxmail这类邮件软件,就是通过脚本功能来实现的。也正因为脚本的这些特点,往往被一些别有用心的人所利用。例如在脚本中加入一些破坏计算机系统的命令,这样当用户浏览网页时,一旦调用这类脚本,便会使用户的系统受到攻击。所以用户应根据对所访问网页的信任程度选择安全等级,特别是对于那些本身内容就非法的网页,更不要轻易允许使用脚本。通过“安全设置”对话框,选择“脚本”选项下的各种设置就可以轻松实现对脚本的禁用和启用。 参考技术B 楼上,我无语,脚本语言比如javascript和vbscript,是客户端语言,他可以让非编程人员进行编程
我如何制作这个脚本?
【中文标题】我如何制作这个脚本?【英文标题】:How do I make this script? 【发布时间】:2021-10-20 04:37:50 【问题描述】:我想要一个在 CMD 中使用这些选项的脚本:
wmic bios get serialnumber
然后询问供应商,即。惠普或戴尔。
那么输出应该是类似于来自 wmic 的vendor-serialnumber
,然后在序列号中添加一个 -,如下所示:
YHT3-1234
“-”应始终位于序列号的最后 4 位数字之前, 所以最终的输出会是这样的:
HP-YHT3-1234
【问题讨论】:
您在测试WMIC时是否使用过以下命令BIOS Get Manufacturer
?肯定会返回Hewlett-Packard
或类似的东西,那么为什么要求最终用户输入供应商呢?不要为脚本的潜在问题敞开大门,头号问题始终是最终用户!
我不想要完整的输出长度。我只想要一个简短的标识符。因此,如果脚本询问诸如“供应商是什么:%input%”之类的问题,那么 %output%-Serialnumber 以及最后 4 位数字/字母前面的 - 会很棒。最终输出应该类似于:%input%-YTHE-1234
如果Manufacturer
字符串包含HP
或Hewlett-Packard
,那么您的脚本可以检测到并自动添加前缀HP
,而不是要求最终用户确定并正确键入。字符串Dell
也是如此。就像我说的,如果脚本已经可以使用这些信息,并且使用相同的 WMI 查询,那么就没有理由让最终用户参与进来,从而导致潜在的问题。
wmic BIOS get Version
是否返回对供应商有用的信息?在我的系统上,它返回类似<short_vendor_name> - <version_number>
的内容。如果这没有帮助,为什么不使用翻译列表:for %%K in ("Dell Inc.=Dell" "Microsoft Corp.=MS" "Hewlett-Packard=HP") do for /F "tokens=1* delims== eol==" %%I in ("%%~K") do if /I "%Manufacturer%"=="%%I" set "Vendor=%%J"
【参考方案1】:
这是使用 PowerShell 获取它的另一种方法。除非您的组织禁止它,否则 PowerShell 可在所有受支持的 Windows 系统上使用。
FOR /F "delims=" %A IN ('powershell -NoLogo -NoProfile -Command ^
"$x=Get-CimInstance CIM_BIOSElement;"
"'0-1-2' -f"
"@($x.Manufacturer, $x.SerialNumber.Substring(0,$x.SerialNumber.Length - 4),"
"$x.SerialNumber.Substring($x.SerialNumber.Length - 4))"') DO (SET "RESULT=%A")
ECHO RESULT is %RESULT%
如果进入 .bat/.cmd 脚本,请记住将 PERCENT SIGN 字符加倍。
FOR /F "delims=" %%A IN ('powershell -NoLogo -NoProfile -Command ^
"$x=Get-CimInstance CIM_BIOSElement;"
"'0-1-2' -f"
"@($x.Manufacturer, $x.SerialNumber.Substring(0,$x.SerialNumber.Length - 4),"
"$x.SerialNumber.Substring($x.SerialNumber.Length - 4))"') DO (SET "RESULT=%%A")
ECHO RESULT is %RESULT%
【讨论】:
【参考方案2】:这里有一个快速示例,向您展示如何在序列号中引入连字符/破折号,以及一些额外的工作来自动检测制造商,并根据需要缩短为标识符。
@Echo Off
SetLocal EnableExtensions
Set "Vendor="
Set "Serial="
For /F Tokens^=6^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe BIOS Where "Manufacturer Like '%%Hewlett-Packard%%' Or Manufacturer Like '%%Dell%%' And SerialNumber Is Not NULL" Get Manufacturer^,SerialNumber /Format:MOF 2^>NUL') Do If Not Defined Vendor (Set "Vendor=%%G") Else Set "Serial=%%G"
If Not Defined Vendor GoTo :EOF
If "%Vendor:Dell=%" == "%Vendor%" (Set "Serial=HP-%Serial:~,-4%-%Serial:~-4%") Else Set "Serial=Dell-%Serial:~,-4%-%Serial:~-4%"
Echo %Serial%
Pause
显然,如果有很多制造商,则需要做额外的工作。
出于不必要的礼貌,这里是相同的方法,只是这次为最终用户提供了破解代码或破坏结果的机会:
@Echo Off
SetLocal EnableExtensions
Set "Serial="
For /F Tokens^=6^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe BIOS Where "SerialNumber Is Not NULL" Get SerialNumber /Format:MOF 2^>NUL') Do Set "Serial=%%G"
If Not Defined Serial GoTo :EOF
Set /P "Vendor=Type the name of the Computer Manufacturer, and press ENTER>"
Echo %Vendor%-%Serial:~,-4%-%Serial:~-4%
Pause
基于对一台惠普笔记本和下面 KJ 的 cmets 的非常有限的测试,以下想法也可能有用:
@Echo Off
SetLocal EnableExtensions
Set "Serial="
Set "Vendor="
For /F Tokens^=2^,4^ Delims^=^" %%G In ('%SystemRoot%\System32\wbem\WMIC.exe
CSProduct Assoc:List 2^>NUL') Do Set "Serial=%%G" & For /F %%I In ('
%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NoProfile
"-Join '%%H'.ToUpper()[0..3]"') Do Set "Vendor=%%I"
If Not Defined Serial GoTo :EOF
Echo %Vendor%-%Serial:~,-4%-%Serial:~-4%
Pause
这使用 PowerShell 仅从 WMIC 的 CSProduct
别名作为 Name
值返回的字符串中返回最多大写的前四个字符。所以Compaq
将返回COMP
,Dell
作为DELL
,Lenovo
作为LENO
Samsung
作为SAMS
等等。然后这将作为序列号的前缀,(拆分为之前),在我的测试中作为 ComputerSystemProduct IdentificationNumber 返回。
【讨论】:
这会输出制造商的全长。我只是希望它将您自己输入的输入添加到最终输出中。所以它将是 %input%Serialnum-mber。但感谢惊人的脚本 =) 不,它没有,分配给%Vendor%
的字符串值包含完整的制造商字符串,但是,%Serial%
,使用上面的代码只会以HP-
或Dell-
开头根据要求,它后面将跟随返回的序列号,最后四个字符用连字符/破折号分隔。使用上面提交的代码,%Vendor%
字符串值的唯一可能输出可能是那些包含精确字符序列Hewlett-Packard
的输出,或者那些包含精确字符序列Dell
的输出。然后If
命令会缩短它。
顺便说一句 @SemtexSoup,我在我的答案底部也提供了不健壮和疯狂的代码,所以如果你愿意,你可以继续引入不必要的问题。请注意,正如我已经提到的,最终用户可以直接点击[ENTER]
,或者可以在Set /P
提示符处输入任何他们想要的内容。这不仅包括完整的制造商字符串、(您不想要的) 或一般输入错误;还有毒字符或恶意字符串,(可能会退出脚本,损坏您的计算机或其数据,或者在不启用延迟扩展的情况下无法echo
)。
巧合的是,我目前正在修理的 PC 是一台 HP,在其内部 Insyde
被称为 Caption
、Description
、Name
、@ 987654349@ 和BIOSVersion
。后者是一个字符串数组,其中包含一些前面提到的与Version
一起使用的字符串HPQOEM - 1
。但是Manufacturer
字符串仍然是Hewlett-Packard
。像往常一样,许多值取决于制造商正确配置的东西。 @KJ,%SystemRoot%\System32\wbem\WMIC.exe SystemEnclosure Get Manufacturer
返回什么?
另外,我确信%SystemRoot%\System32\wbem\WMIC.exe BaseBoard Get Manufacturer
,或者可能更好的%SystemRoot%\System32\wbem\WMIC.exe CSProduct Get Vendor
应该得到我们需要的信息。然而,目前,不管怎样,我已经发布了一个版本,它允许完美工作的最终用户输入所需的字符串。以上是关于什么叫做脚本?如何使用脚本?再如如何制作脚本?的主要内容,如果未能解决你的问题,请参考以下文章
如何制作 PowerShell FTPS 脚本 (SSL) 来上传单个文件?