批处理管理文件以及文件夹

一、       Set 命令

回顾一下set 命令有两个参数

1 /a 直接设置了一个变量或者变量表达式,比如:

Set /a var=2; 或者 set /a var+=2;

2 /p 设置一个变量,这个变量来自用户的命令行的输入结果

Set /p num=请选择要执行的操作

If %num% == “1” (

……

)

二 案列

2.1 批量更改文件名

@echo off

echo Ready for updaing file name......

set extension=.rar

set /a sum=0

 

for %%m in (*) do (

      if not"%%m" == "updateFileName.bat" (

           ren %%m%%m%extension%

           set /a sum+=1

      )

)

echo finished update file name. there has%sum% files wereupdated!

set sum=

set extension=

pause

注意:ren 命令是重新命名文件的命令

2.2 循环执行命令

@echo off

echo test ping the host 192.168.3.115......

:again

ping 192.168.3.115 > nul rem > nul don't show themessage

if not %errorlevel% != 0 GOTO again

start "could connect to host" echo success toconnect host 192.168.3.115

2.3 当前路径 (%cd% vs %~dp0)

%cd%: 可以用在批处理文件中,也可以用在命令行中; 其内容为命令的执行路径或批处理文件的执行路径. 也就是我在E盘执行一个d盘的批处理文件, %cd% 显示的还是E盘,并非D盘

%~dp0:只能用于批处理文件中,它打印的只是批处理文件所在的位置,而与在什么位置执行这个文件没有关系,所以我在E盘执行D盘的批处理文件,那么他的显示结果是D盘

@echo off

echo %%cd%%: %cd%

echo %%~dp0%: %~dp0

pause

E:\script_bench>printPath.bat

%cd%: E:\script_bench

%~dp0: E:\script_bench\

'puase' is not recognized as an internal orexternal command,

operable program or batch file.

 

E:\script_bench>d:

 

D:\>E:\script_bench\printPath.bat

%cd%: D:\

%~dp0: E:\script_bench\

2.4 将文件名自动更新为当前系统日期

@echo off

 

if not exist %1 (

      echo required filenot exist, please check you file

      goto end

)

 

rem %1: 被修改的文件名 ~x:得到变量的扩展名 %~x1:表示%1 文件的扩展名

set extension=%~x1

 

rem date/T 01/16/2016 Sat

for /f "tokens=1-3 delims=/- " %%c in ('date/T') do(

      rem 如果在for循环初始变量能确定,以及循环次数能确定,那么连续的几个变量是有效的比如这里的cd e

      set date=%%c%%d%%e

)

 

ren %1 %date%%extension%

echo.

echo file: %1 has been updated to %date%%extension%

set extension=

set date=

:end

echo done

pause

2.5 批处理程序中不同盘符路径的切换

这个是很有用的,比如有时候我们想切换到某个盘符路径下执行某个批处理文件,这时候这个可以派上用场

@echo off

echo.

echo 从当前盘符切换到E:\script_bench\files

pushd E:\script_bench\files

echo 当前路径:%cd%

echo 当前路径包含以下文件夹:

dir/ad/b

echo.

echo 执行打包bat

call updateFileName.bat

echo 返回批处理运行时所在的盘符及路径

popd

pause

pushd 要切换的路径

popd:返回最近一次执行pushd命令之间的路径,这样可以避免更改当前的工作路径

dir: /a 展示带有指定属性的文件d属性,表示只显示文件夹 /b 以见简洁的方式显示,详情请查阅dir/?

2.6 计算当前目录以及子目录所占的硬盘空间

@echo off

echo computing the space of current directory......

echo **********************************************

for /f "tokens=*" %%a in ('dir') do (

      echo"%%a"|find" files" > nul && for /f"tokens=3*" %%b in ("%%a") do (

           echo currentdirecotry space: %%b%%c

      )

)

echo **********************************************

echo computing the space of child direcotry........

for /f %%a in ('dir/ad/s/b') do (

      for /f"tokens=*" %%b in ('"dir %%a\"') do (

           echo"%%b"\find" files" > nul for /f "tokens=3*"%%c in ('%%b') do (

                 echo%%a: %%c%%d

           )

      )

)

echo end of computing

Note:

假如执行一个命令,但是不想在屏幕里看到这个命令的执行情况,可以使用"[命令]>nul"就可以屏蔽命令在屏幕上的输出,但是有的命令执行会出错,即使用了">nul"也不能屏蔽命令产生的信息,所以就在后面加" 2>nul"这个,就是"[命令]>nul+空格+2>nul",这样,不管命令是否正确的运行,都不会在屏幕看到这个命令所产生的屏幕显示了。 


用"dir"命令可以显示当前目录的文件及文件夹列表,这时如果用"dir>nul",就看不见dir命令执行的屏幕输出了,那么再键入"dirr"时会显示" 'dirr' 不是内部命令,也不是外部命令,也不是批处理文件。",这时如果用"dirr>nul"来屏蔽这个错误,因为依然会出现" 'dirr' 不是内部命令,也不是外部命令,也不是批处理文件。"这个错误提示,这时如果用"dirr>nul 2>nul"的话,就在屏幕上看不到上面的出错提示了

2.7 删除目录下的空文件

@echo off
for /f "tokens=*" %%a in ('dir /b /ad /s^|sort /r') do rd"%%a" 2>nul
echo  
删除成功, 已删除所有空文件夹
pause

^: 表示后面的字符只是普通的字符,不具有任何特殊含义

2.8 创建一个空文件

cd> empty.txt

cd. 没有任何输出

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫言静好、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值