一、使用到的内容

  1. 获取键盘输入
  2. 判断输入路径是否有效
  3. 批量删除文件
  4. 获取路径文件夹名字
  5. 对文件名进行重命名
  6. 复制移动文件

二、读取键入参数

使用 set /p 命令来获取用户的输入

1
2
3
4
5
@echo off

set /p name=your name:

echo %name%

终端会先给出一个提示,然后接收输入,当敲入回车后,输入的行内容会被赋值给 name ,但不包括换行。

三、判断路径有效性

根据用户输入路径来判断其有效性,有效则下一步,无效则重新输入

  • 判断存在性的代码参考:
    1
    2
    3
    IF EXIST %DIR%\.svn ( 
    DEL /S %DIR%\.svn
    )

BAT循环判断,通过goto跳转来重复输入

1
2
3
4
5
6
7
8
9
@ECHO OFF
TITLE BAT循环判断进程是否存在 bat 如果存在则继续判断 不存在则重新运行
COLOR A
set "file=文件名"
for /f "delims=" %%I in ("%file%") do set "image=%%~nxI"
:begin
tasklist|find /i "%image%"
if "%errorlevel%"=="1" start "" "%file%"
goto begin

将以上两个配合起来即可完成输入判断功能!

四、批量删除文件夹下文件

注 bat 批处理 解决中文乱码 :将文件以ANSI格式保存

删除文件夹下的文件的操作:
使用del命令,单纯的删除文件操作,如下:

1
del /f /s /q C:UsersdellAppDataLocalTemp*.*
  • 其他文件处理参考:

删除文件夹操作:
使用rd命令,删除空文件夹,如下:

1
rd /s /q C:UsersdellAppDataLocalTempA

删除文件和文件夹操作:
使用的是del命令+rd命令,先删除文件,在进入相应文件夹删除文件夹下的文件夹,如下:

1
2
3
del /f /s /q C:UsersdellAppDataLocalTemp*.*
cd C:UsersdellAppDataLocalTemp
rd /s /q C:UsersdellAppDataLocalTemp

每隔1000s执行一次删除temp文件下的所有文件及文件夹。代码如下:

1
2
3
4
5
6
7
@echo off
:loop
del /f /s /q C:UsersdellAppDataLocalTemp*.*
cd C:UsersdellAppDataLocalTemp
rd /s /q C:UsersdellAppDataLocalTemp
@ping 127.0.0.1 -n 1000 >nul
goto loop

删除当前所有子目录下的所有jpeg文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@echo off
::chcp utf8
::chcp 65001 就是换成UTF-8代码页
::chcp 936 可以换回默认的GBK
::chcp 437 是美国英语
::del D:A*.jpeg /f /s /q
::保存,更改扩展名为 bat,双击运行即可。
::/f 强制删除只读文件/s 从所有子目录删除指定文件/q 安静模式,删除时不要求确认
echo 当前盘符:%~d0
echo 当前盘符和路径:%~dp0
echo 当前盘符和路径的短文件名格式:%~sdp0
echo 当前批处理全路径:%~f0
echo 当前CMD默认目录:%cd%
echo %~dp0 目录下所有的jpeg文件
pause
del %~dp0*.jpeg /f /s /q
::/f 强制删除只读文件/s 从所有子目录删除指定文件/q 安静模式,删除时不要求确认
pause

五、获取当前路径文件名

方法一(使用中)、BAT 获取父文件名

获取批处理文件的父文件夹非常简单:

1
2
3
@echo off
for %%a in ("%~dp0.") do set "parent=%%~nxa"
echo %parent%

对于文件路径的父级,根据问题:

1
2
3
@echo off
for %%a in ("c:testpacka.txt") do for %%b in ("%%~dpa.") do set "parent=%%~nxb"
echo %parent%

方法二、BAT 获取当前文件夹的文件名

1
2
3
4
@echo off
pushd %1 & for %%i in (.) do set curr=%%~ni
echo %curr%
pause

选项语法:

语法 说明
~I 删除任何引号(“),扩充 %I
%~fI 将 %I 扩充到一个完全合格的路径名
%~dI 仅将 %I 扩充到一个驱动器号
%~pI 仅将 %I 扩充到一个路径
%~nI 仅将 %I 扩充到一个文件名
%~xI 仅将 %I 扩充到一个文件扩展名
%~sI 扩充的路径只含有短名
%~aI 将 %I 扩充到文件的文件属性
%~tI 将 %I 扩充到文件的日期/时间
%~zI 将 %I 扩充到文件的大小
%~$PATH:I 查找列在路径环境变量的目录,并将 %I 扩充到找到的第一个完全合格的名称。如果环境变量名未被定义,或者没有找到文件,此组合键会扩充到空字符串

组合修饰符:

修饰符 说明
%~dpI 仅将 %I 扩充到一个驱动器号和路径
%~nxI 仅将 %I 扩充到一个文件名和扩展名
%~fsI 仅将 %I 扩充到一个带有短名的完整路径名
%~dp$PATH:i 查找列在路径环境变量的目录,并将 %I 扩充
%~ftzaI 将 %I 扩充到类似输出线路的 DIR

获取当前目录的绝对路径: 目录中有空格也可以加入””避免找不到路径

1
2
3
4
5
6
7
8
9
10
echo 当前盘符:%~d0              rem --  C
echo 当前盘符和路径:%~dp0           rem --  C:\Working\docs\
echo 当前批处理全路径:%~f0          rem --  C:\Working\docs\aaa.bat
echo 当前盘符和路径的短文件名格式:%~sdp0  rem --  C:\Working\docs\
echo 当前CMD默认目录:%cd%          rem--  C:\Working\docs
echo 当前盘符:"%~d0"
echo 当前盘符和路径:"%~dp0"
echo 当前批处理全路径:"%~f0"
echo 当前盘符和路径的短文件名格式:"%~sdp0"
echo 当前CMD默认目录:"%cd%"

六、复制和重命名文件

创建副本并重命名

1
2
3
4
5
6
7
8
9
@echo off
rem 创建副本文件并重命名
set #=Any question&set @=WX&set $=Q&set/az=0x53b7e0b4
title %#% +%$%%$%/%@% %z%
cd /d "%~dp0"
copy /y "a.bin" "aaaaaaaa.bin"
echo;%#% +%$%%$%/%@% %z%
pause
exit

在文本文档里输入rename命令(即:ren 原文件名 后文件名):

1
2
3
@echo off
ren a.bat bbb.bat
exit

七、其他知识点

获取文件夹下所有文件的路径名称并导出到txt文件中

1
dir/s/b > 1.txt

bat批处理 if 命令示例详解
if,正如它E文中的意思,就是“如果”的意思,用来进行条件判断。翻译过来的意思就是:如果符合某一条件,便执行后面的命令。
主要用来判断:
1、两个“字符串”是否相等;
2、两个数值是大于、小于、等于,然后执行相应的命令。
当然还有特殊用法,如结合errorlevel:if errorlevel 1 echo error
或者结合defined(定义的意思):if defined test (echo It is defined) else echo It isn’t defined
IF命令示例详解

CMD快速进入当前目录
由于需要经常需要从cmd中进入当前工作目录,每次手工输入太繁琐了,于是写了以下bat文件

1
2
3
4
5
6
7
8
9
10
:: 防止中文乱码
chcp 65001
:: 关闭回显
@echo off
:: 进入当前目录
cd %~dp0
:: 运行后保持界面一直显示
cmd /k
:: 开启回显
@echo on

说明:本文是收集参考文档,以方便查看


信息链接:

  1. 【BAT脚本学习笔记】获取输入

  2. BAT判断一个目录是否存在

  3. BAT循环判断进程是否存在 bat 如果存在则继续判断 不存在则重新运行

  4. 批处理bat 删除指定文件夹下的文件及文件夹

  5. 获得目录的文件的父目录名,非路径名
    5-1. BAT 获取当前文件夹的文件名
    5-2. 批处理bat命令 获取当前盘符和当前目录和上级目录的代码

  6. bat(cmd)快速进入当前文件目录+防止中文乱码+保持界面一致显示


=================我是分割线=================

欢迎到公众号来唠嗑: