Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
Windows批处理文件有哪些不太为人所知,但很重要和有用的特性?
指南:
每个答案一个特征 给出特性的简短描述和示例,而不仅仅是文档链接 将答案限制在本地功能,即不需要额外的软件,如Windows资源包
澄清:这里我们指的是由cmd.exe处理的脚本,这是WinNT变体的默认值。
(请参见:Windows批处理文件:.bat vs .cmd?)
当前回答
一个非常古老(大约1990年)的技巧来获得环境变量的总大小:
set > test
dir test
del test
其他回答
输出一个空行:
echo.
批处理文件中的数组。
设置一个值:
set count=1
set var%count%=42
在命令行提取一个值:
call echo %var%count%%
从批处理文件中提取一个值:
call echo %%var%count%%%
注意额外的扫射%符号。
这项技术可能看起来有点复杂,但它非常有用。如上所述,将打印var1(即42)的内容。如果我们想将其他变量设置为var1中的值,也可以用set替换echo命令。这意味着下面的值在命令行是有效的赋值:
call set x=%var%count%%
然后查看va1的值:
echo %x%
要获取当前日期/时间用于日志文件等,我在批处理文件中使用这个:
for /f "usebackq tokens=1,2,3,4,5,6,7 delims=/:. " %%a in (`echo %DATE% %TIME%`) do set NOW=%%d%%b%%c_%%e%%f%%g
set LOG=output_%NOW%.log
删除周围的报价。
for /f "useback tokens=*" %%a in ('%str%') do set str=%%~a
我最近必须写一个批处理文件,由VS预构建事件调用,我想在项目目录中作为参数传递。在批处理文件中,我需要将路径与嵌套子文件夹名称连接起来,但首先需要删除周围的引号。
FIND作为grep的替代品。 我用find给自己黑了个电话簿。非常有用:
@echo off
:begin
set /p term=Enter query:
type phonebookfile.txt |find /i "%term%"
if %errorlevel% == 0 GOTO :choose
echo No entry found
set /p new_entry=Add new entry:
echo %new_entry% >> phonebookfile.txt
:choose
set /p action=(q)uit, (n)ew query or (e)dit? [q]
if "%action%"=="n" GOTO anfang
if "%action%"=="e" (
notepad phonebookfile.txt
goto :choose
)
非常快速有效。