这次遇到一个没有后缀名的文件,需要批量的从多个子目录下移动
这个文件没有后缀,无法直接使用*.后缀名批量移动,而且每一个子目录下都有,每一个都进去移动出来太麻烦了,使用dos命令试一下
思路:首先打印该目录下的所有子目录文件,然后筛掉所有json文件,接着移动文件到其他路径
代码:
@echo off
setlocal enabledelayedexpansion
set var=需要移动到的路径
for /r %%a in (*) do (
if /i not "%%~xa" == ".json" (
echo %%a && move %%a !var!
)
)
pause
@echo off -------- 关闭打印
setlocal enabledelayedexpansion-------- 设置本地为延迟扩展,延迟环境变量扩展
set var=设置赋值需要移动到的路径
for /r %%a in (*) do (-------- /r是打印子目录下的文件,*指全部
if /i not "%%~xa" == ".json" (-------- /i是if的扩展,dos的解释是:/I 开关可以用于 IF 的 string1==string2 的形式上;而%%a前面加的~x的作用我也不清楚,查不到什么资料,只知道加上后可以省略后缀名前面的字符,类似于*.json,使用if not是为了剔除不需要的json文件
echo %%a && move %%a !var!-------- 输出文件名并移动该文件到某个路径下
注意点:如果需要移动到的地址含有中文,必须改变编码格式:
如果是UTF-8格式的,需要另存为为同名的ANSI格式的文件保存,再双击运行即可,否则会出现乱码
这段代码最重要的点是for /r 打印的范围使用了*,而不是dir,因为使用dir无法打印出文件的路径,而没有文件的路径仅仅只有文件名是无法移动具体的文件到某个路径下
之前尝试过一个思路是获取到文件名,然后直接移动或者重命名添加上后缀,结果是:
@echo off
setlocal enabledelayedexpansion
for /f "tokens=8 delims=\" %%c in ('dir /b/s *.json') do (
move %%c 需要移动到的地址
)
pause
这个是剪切了文件名,赋值给变量%%c,再移动到需要移动的地址,其实如果文件在当前目录下可以移动到任何地址,但是文件是在子目录下的,当前目录是父目录,所以无法移动
注意:代码必须复制到bat文件内,且bat文件必须放在需要移动的文件目录下,双击运行