如果要查for的用法,可直接在cmd下打 for/?
练习0: set, echo
@echo off
set file=a.txt
if exist %file% (
echo "file exist"
)
pause
练习1: call
a.bat
@echo off
echo "this is a"
call b.bat
echo "end of a"
pause
b.bat
@echo off
echo "this is B"
练习2: if 处理,参数
查看help help if
c.bat 1 2
c.bat 1 1
@echo off
set p1=%1
set p2=%2
IF %p1%==%p2% goto eq
echo "not equal"
goto END
:eq
echo "equals"
goto END
:END
pause
文件是否存在
c.bat [filename]
@echo off
set file=%1
if exist %file% goto yes
echo "file not exist"
goto END
:yes
echo "file exist"
goto END
:END
pause
练习3:for
变量名是 %%var
3.1 直接for
显示出以 ./b* 开头的文件名
@echo off
for %%f in (./b*) do (
echo %%f
)
pause
3.2 for /D
显示出以 ./te* 开头的文件夹名
@echo off
for /D %%f in (./te*) do (
echo %%f
)
pause
/R: 列出当前目录和子目录下面的文件,与第一个例子相比,多了子文件夹下的文件名
3.3 for 语句 /L
for i in range(1,10), i+=2
@echo off
echo "带/L选项"
for /L %%i in (1,2,10) do echo %%i
echo "不带/L选项"
for %%i in (1,2,10) do echo %%i
pause
“带/L选项”
1
3
5
7
9
“不带/L选项”
1
2
10
我自己用的两个练习:
1. 显示出某路径 ./src 下的文件名, 输出到name.txt
@echo off
if exist ./res goto YES
md res
:YES
for /R .\src %%i in (*.*) do (
echo %%i >> .\res\name.txt
)
pause
批量修改文件名
对当前路径下的图片进行重命名,cat_0001.jpg, cat_0002.jpg,…
保留原后缀名
%%~xa 为 %%a 的后缀名
!nm:~-4!取 nm的后4位,改为!nm:~-3!,则为001,002,…
@echo off
setlocal enabledelayedexpansion
FOR /F "delims=" %%a IN ('dir /b *.jpg,*.png,*.bmp,*.gif') DO (
SET /a x=!x!+1
SET nm=00000!x!
REM echo !x!
ren %%a cat_!nm:~-4!%%~xa
)
pause
统一后缀名
@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=1,2 delims=." %%a IN ('dir /b *.jpg,*.png,*.bmp,*.gif') DO (
SET /a x=!x!+1
SET nm=00000!x!
REM echo !x!
ren %%a.%%b cat_!nm:~-4!.jpg
)
pause