1 概述
批处理文件(Batchfile)是 DOS 下的批处理文件,是一种无格式的文本文件,文件扩展名为 .bat 或 .cmd。在命令行输入批处理文件名或双击批处理文件即可运行。批处理文件常用来简化日常重复性任务,但批处理文件应该仅仅被用于小功能或者简单的包装脚本,复杂功能应该使用Python脚本。[1]
2 批处理命令
[Home]+R
打开cmd
窗口,输入help
显示部分DOS命令
序号 | 命令 | 描述 | 示例 |
---|---|---|---|
1 | find | 在文件中搜索字符串 | find /? |
2 | findstr | 在文件中寻找字符串 | findstr /? |
3 | move | 移动文件并重命名文件和目录 | move /? |
4 | copy | 将一份或多份文件复制到另一个位置 | copy /? |
5 | xcopy | 复制文件和目录树 | xcopy /? |
6 | del | 删除一个或数个文件 | del /? |
7 | mkdir | 创建目录 | mkdir /? |
8 | rmdir | 删除一个目录 | rmdir /? or rd /? |
9 | cls | 清除屏幕 | |
10 | type | 显示文本文件的内容,与 Linux 系统 cat 命令功能类似 | |
11 | rename | 重命名文件 | |
12 | pushd | 改变当前目录到指定目录,并保存当前的目录在堆栈顶端 | |
13 | popd | 改变当前目录,跳转到堆栈顶端保存的目录,并将堆栈顶端的目录删除 | |
14 | where | 显示符合搜索模式的文件位置。在默认情况下,搜索是在当前目录和 PATH环境变量指定的路径中执行的。 | where /? |
自定义变量:
set CURRDIR=%~dp0
SET REPO_ROOT=%cd%
SET BUILD_DIR=cmake_build
PATH %PATH%;..\externals\tcltk\bin
set PATH=%PATH%;..\externals\tcltk\bin
SET CMAKE_DIR=%REPO_ROOT%\tensorflow\contrib\cmake
SET MSBUILD_EXE="C:\Program Files (x86)\MSBuild\14.0\Bin\msbuild.exe"
SET PHP_BUILDCONF_PATH=%~dp0
SET PHP_SDK_SCRIPT_PATH=
set SDK_RUNNER=%PHP_BUILD_CACHE_SDK_DIR%\phpsdk-%PHP_BUILD_CRT%-%PLATFORM%.bat
set CMD_LINE_ARGS=%$
set DEFAULT_JVM_OPTS=
set TOOLS_PATH=packages\Grpc.Tools.1.14.1\tools\windows_x86
set GRPC_PYTHON_BUILD_WITH_CYTHON=1
set ARTIFACT_DIR=%cd%\%ARTIFACTS_OUT%
set GRPC_PYTHON_BUILD_EXT_COMPILER_JOBS=2
SET SOURCE_DIR=F:\frameworks\tensorflow\
SET SOURCE_PYTHON_SCRIPT=%RETVAL%
SET SOURCE_VERSION_CC=%RETVAL%
DIR %REPO_ROOT%\%BUILD_DIR%\tf_python\dist\ /S /B > wheel_filename_file
set PYTHON_PROJECT_NAME=cntk
if /i %p_GpuBuild% equ true (
set PYTHON_PROJECT_NAME=cntk-gpu
)
set PYTHON_WITH_DEPS=
if /i %p_CNTK_PYTHON_WITH_DEPS% equ true (
set PYTHON_WITH_DEPS="--with-deps"
)
set SOURCEDIR=%~f1
set TARGETDIR=%~f2
注意事项:
color
命令只能对整个控制台设置前景和背景颜色,无法对部分显示设置输出颜色;echo.
输出空行;del .\*.rar
Batchfile中路径分隔使用\
;- 转义字符 ^: 要输出特殊字符,就需要用 echo ^>、echo ^|、echo ||、echo ^^……之类的格式来处理;如果要显示%本身时,需要在前面用%来转义: %%, 例如:
echo.Please use
make <target>where ^<target^> is one of
学习资料:
[1] Windows批处理命令详解
[2] Windows bat批处理基础命令学习教程
[3] 一份比较详细的DOS批处理命令说明
[4] bat脚本基本命令语法
[5] bat批处理命令大全
[6] Bat命令学习
[7] dos bat批处理命令帮助
[8] bat批处理脚本详细教程
[未完待续]
3 应用举例
示例-1: 清理系统垃圾.bat
@echo off
echo 正在清除系统垃圾文件,请稍等......
del /f /s /q %systemdrive%\*.tmp
del /f /s /q %systemdrive%\*._mp
del /f /s /q %systemdrive%\*.log
del /f /s /q %systemdrive%\*.gid
del /f /s /q %systemdrive%\*.chk
del /f /s /q %systemdrive%\*.old
del /f /s /q %systemdrive%\recycled\*.*
del /f /s /q %windir%\*.bak
del /f /s /q %windir%\prefetch\*.*
rd /s /q %windir%\temp & md %windir%\temp
del /f /q %userprofile%\cookies\*.*
del /f /q %userprofile%\recent\*.*
del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
del /f /s /q "%userprofile%\recent\*.*"
echo 清除系统垃圾完成!
echo. & pause
示例-2: 设置网络静态IP
@echo 更改“无线网络连接”IP地址
@echo IP:192.168.6.112
@echo 网关:192.168.1.1
@echo DNS:10.10.198.31
@pause
@echo off
netsh interface ip set address name="无线网络连接" source=static addr=192.168.6.112 mask=255.255.255.0 gateway=192.168.6.1
netsh interface ip set dns name="无线网络连接" source=static addr=10.10.198.31
ping 192.168.6.112
示例-3: cmake构建VS2017工程
@echo off
set CURRENT_DIR=%~dp0
set PROJECT_NAME=project
echo %CURRENT_DIR%%PROJECT_NAME%
if not exist %CURRENT_DIR%%PROJECT_NAME% (
mkdir %CURRENT_DIR%%PROJECT_NAME%
)
cd %CURRENT_DIR%%PROJECT_NAME%
@rem Generate VS2017 project.
cmake ../ -G "Visual Studio 15 2017 Win64"
pause
示例-4: 收集某一类文件到指定文件夹
@echo off
set ROOT_PATH=%~dp0
set SET_PATH=%ROOT_PATH%\nf_set
@rem Clear Workspace
if exist %SET_PATH% (
rmdir /q /s %SET_PATH%
)
mkdir %SET_PATH%
@rem Collect NF set
for /F %%S in ('dir %ROOT_PATH%\*.set /s /b') do (
move %%S %SET_PATH%
)
pause
示例-5: Batchfile版本声明注释
@rem Copyright 2017 gRPC authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem http://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem Move python installation from _32bit to _32bits where they are expected by python artifact builder
@rem TODO(jtattermusch): get rid of this hack
@echo off
rem ******************************************************
rem * Clean up output files from previous runs
rem ******************************************************
@echo off
rem =========================================================
rem We copy xgsubmit.exe to work around a known output issue,
rem and work with the copy to submit the actual response file
rem =========================================================
@echo off
echo.
echo # ======================================================================
echo # test_decimal: platform=x64
echo # ======================================================================
echo.
echo # ==================== refleak tests =======================
@rem TODO(jtattermusch): is there a better way to force using MSVC?
@rem select the MSVC compiler explicitly to avoid using gcc from mingw or cygwin
@rem (both are on path)
set "MSVC_COMPILER=C:/Program Files (x86)/Microsoft Visual Studio 14.0/VC/bin/cl.exe"
示例-6: PUSHD & POPD
@echo off
rem This batch file deletes all .txt files in a specified directory
pushd %1
del *.txt
popd
echo All text files deleted in the %1 directory
示例-7: Batchfile错误处理
mkdir -p %ARTIFACTS_OUT%
copy /Y cmake\build\%ARCHITECTURE%\grpc_csharp_ext.dll %ARTIFACTS_OUT% || goto :error
copy /Y cmake\build\%ARCHITECTURE%\grpc_csharp_ext.pdb %ARTIFACTS_OUT% || goto :error
goto :EOF
:error
echo Failed!
exit /b %errorlevel%
4 参考资料
[1] Google Shell 风格指南
[2] grpc/grpc
[3] tensorflow/tensorflow
[4] pytorch/pytorch