批处理 获得文件路径

来源:百度知道 编辑:UC知道 时间:2024/05/27 17:15:20
求助写一个批处理——
查找d:\a 和d:\b 下文件名含有“im ok”的文件,先备份该文件(复制后缀.bak),并将文件的全路径输出到path.txt,然后移动到d:\all

顺便写下要全盘搜索的写法,要每个任务单独执行我勉强能理解,本来还想再加多几个动作的,不过大家都很忙,脚本都很少有注释的,你们就写出来我慢慢学习吧。先谢谢了。
感谢睿之锐兄二度回答我的相关问题。我没把要求表达清楚,是找到指定文件后将它们的路径写到path.txt,并移动到d:\all里,不过要把它们备份(生成*.bak)。
简单地说就是①移动到d:\all,并②获得路径,只是移动前③备份它们。共3点要求。

这个程序把.bak文件都移动过来了,而且部分文件还是*.bak.bak(如果把move改成copy就不会出现这样)。你可以新建几个文本文档测试下,麻烦再改一改。
另外如千羽之城所说,路径里有空格就无法成功执行,怎么办?

关于path.txt:获得路径信息是想知道这些文件具体是保存在哪里,如果仅仅在原文件夹是没有实际用处的,最好在.bat所在目录生成,或者一起移动到d:\all。另外为了预防重名,生成的txt不一定以path命名。还算简单吧?

补充2:
是在原目录内备份(.bak)。不移动.bak备份文件。可能你理解有别。下次备份可能会覆盖上次的bak文件,如果有同名可不可以增加编号(for /l)加以区别?这样也可以看到多次内容。
BB石俊杰的代码简短,不过同样没有在原目录生成备份。

@echo off&setlocal Enabledelayedexpansion
for /f "tokens=1,2,3 delims=- " %%i in ('date /t') do set Q=%%i%%j%%k
if not exist "d:\all" md "d:\all"
set M=d:\a,d:\b,C:\rui 01
set "M=!M: ='''''''''''!"
for %%a in (%M%) do (
set R=%%a
set "R=!R:'''''''''''= !"
for /f "delims=" %%i in ('dir /a /b /s "!R!"') do (
for /f "delims=" %%b in ('echo %%~nxi^|find /i "im ok"') do (
for /f "delims=" %%k in ('echo %%b^|find /i "."') do (
for /f "delims=" %%b in ('echo %%~nxi^|find /V ".bak"') do (
attrib "%%i" -s -h -r
set /a I=0
for /f "delims=" %%c in ('type "d:\all\path.txt"^|find /i "%%i"') do set