【基础技能】Windows常用bat片段收集

创建空文件

三个方法

  1. copy /y nul empty.txt 每个文件夹下面都有一个特殊的始终为空的nul文件(类似linux的/dev/nul), /y 是不经确认覆盖empty.txt,但是会 "已复制 1 个文件。"的打印
  2. echo. 2>empty.txt 执行命令时将错误码写入empty.txt,没有错误当然为空文件了
  3. type nul > empty.txt 推荐这个命令,简洁明了

延迟1s

timeout /T 1 /nobreak

获取当前脚本路径的盘符以及当前工作目录的盘符

获取两个盘符后,可以切换到脚本所在盘符,创建相关文件,再切换回工作盘符

::脚本所在的盘符
  set file_dir_driver=%~d0
  ::当前工作目录所在的盘符
  set cur_dir_dirver=%cd:~,2%

判断某个文件或者目录是否存在

使用 exist 判断 文件或目录存在
使用 not exist 判断文件或目录不存在

if exist %file% (
    echo %file% exist
) else (
  echo not exist
)

if not exist %path% (
   echo %path% not exist
)

遍历目录下的所有文件或者特定文件

# 递归遍历 INPUT 目录下的所有文件
for /r %INPUT% %%i in (*) do (
  echo file=%%i
)

# 递归遍历INPUT 目录下,以 .jpg 或 .png 结尾的图片, 
for /r %INPUT% %%i in (*.jpg *.png) do (
  echo file=%%i
)

# 对目录中的文件做操作, 需要使能延迟遍历,且用!!来引用变量
# 注意 % 引用变量发生在执行前, 故for循环中如果操作变量,仍然使用"%"引用变量,会获得最后一次的变量
# 为了解决这个问题,需要声明 delay expansion, 运行时扩展变量,且使用 "!"来引用其变量
setlocal EnableDelayedExpansion
for /r %INPUT% %%i in (*.jpg *.png) do (
  set file=%%i
  echo file:!file!
)
# 递归遍历INPUT 目录下,以 .jpg 或 .png 结尾的图片, 只打印INPUT目录之后的文件信息
for /r %INPUT% %%i in (*.jpg *.png) do (
  set file=%%i
  set part_file=!file:%INPUT%=!
  echo part_file:!part_file!
)

批量处理目录下的每一个文件

@echo off
setlocal EnableDelayedExpansion

set DIR=%~dp0
set INPUT=%DIR%input
set OUTPUT=%DIR%output

for /r %INPUT% %%i in (*.jpg *.png) do (
  set filename=%%~nxi
  set input_dir=%%~dpi
  set output_dir=%OUTPUT%\!input_dir:%INPUT%\=!
  if not exist !output_dir! (
    mkdir !output_dir!
  )

  # 将 INPUT目录下的每一个 jpg/png 文件, 处理后放到 OUTPUT目录下
  # do sth, convert %%i to !output_dir!\!filename!
)
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值