要用windows下的自动代码生成工具,涉及一些按时间备份和路径处理的问题,发现windows下的cmd(bat)脚本命令非常不方便,这时候才觉得linux的好。不过还是找到一些方法,这里分享一下。
1. 获取当前路径 set "abc=%cd%"
本来linux下cd - 命令就可以解决的问题,在windows下得辗转好几条命令,其中最关键的是将当前路径的字符存为一个环境变量
还有几个在脚本中才能用的变量,下面几个命令如果在cmd下输入的话,除了%cd%外,其他是没有效果的。
echo 当前盘符:%~d0
echo 当前路径:%cd%
echo 当前执行命令行:%0
echo 当前bat文件路径:%~dp0
echo 当前bat文件短路径:%~sdp0
--wcd.bat---
@echo off
if '%*'=='' cd & exit /b
if '%*'=='-' (
cd /d %OLDPWD%
set OLDPWD=%cd%
) else (
cd /d %*
if not errorlevel 1 set OLDPWD=%cd%
)
--wcd.bat---
2. 获取当前系统时间 set
3. hudson下调用bat脚本容易出现屏显输出和系统输出冲突的问题,因此最好以如下方式调用
4. Replace String In File bat
@echo off
REM -- Prepare the Command Processor --
SETLOCAL ENABLEEXTENSIONS
SETLOCAL DISABLEDELAYEDEXPANSION
REM ::BatchSubstitude - parses a File line by line and replaces a substring"
REM ::syntax: BatchSubstitude.bat OldStr NewStr File
REM :: OldStr [in] - string to be replaced
REM :: NewStr [in] - string to replace with
REM :: File [in] - file to be parsed
REM :$changed 20100115
REM :$source http://www.dostips.com
IF "%~1"=="" findstr "^::" "%~f0"&GOTO:EOF
FOR /F "tokens=1,* delims=]" %%A IN ('"type %3|find /n /v """') DO (
set "line=%%B"
IF DEFINED line (
call set "line=echo.%%line:%~1=%~2%%"
FOR /F "delims=" %%X IN ('"echo."%%line%%""') DO %%~X
) ELSE echo.
)