@echo off
cls
echo.
echo.
echo *****************************************************************************
echo * *
echo * 批量跑快捷.cmd 9z于2008.3.26 http://693985.qzone.qq.com *
echo * *
echo * 目的: 自动查找出文件夹下所有子文件夹里的快捷方式并建立到到桌面,是绿色软 *
echo * 件爱好者和电脑公司必备工具, 经常整理软件的个人用户使用起来更是方便。 *
echo * *
echo * 使用方法: 把所需要处理的文件夹拖到这个程序上面,或者直接在文件中定义文件 *
echo * 夹,打开文件编辑filetmp变量,默认为当前文件夹 *
echo * *
echo * 要求: 1. 用户事先把每个软件在相应目录下都建立一次快捷方式,如果今后这个目 *
echo * 录被更改了位置,批处理将自动生成新的快捷方式 *
echo * 2. 用户对要注册绿化类的软件建立名字要包含有"注册,绿化,安装,汉化,设 *
echo * 置,破解"字样的批处理、执行文件或注册表文件 *
echo * *
echo *****************************************************************************
set desk=C:\Documents and Settings\All Users\桌面
rem 不想使用查找注册文件功能请把上面这句桌面位置更改为“set desk=nul\"
set filetmp=%cd%
if /i "%cd%" neq "c:\" goto BEGIN
if exist f:\tools\nul set filetmp=f:\tools
if exist e:\tools\nul set filetmp=e:\tools
if exist d:\tools\nul set filetmp=d:\tools
:BEGIN
rem 工作流程:
rem 将目录下的子目录进行/s查找出所有lnk和url文件
rem 对找到的每个文件进入到相应文件夹,如果快捷方式正好指向本文件夹,直接复制到桌面,否则查找其
rem 指向的执行文件,如果本目录里有这个执行文件,则重建快捷方式并发送桌面,没有或指向的是网站则什么都不做。
rem 基本可以使用了,但还有注册功能、空格和一些不规则目录或文件名部分没有完善。
echo.
echo.
echo.
if "%1" gtr "" set filetmp="%1"
call %filetmp:~0,2%
cd %filetmp%
setlocal enabledelayedexpansion
echo 请耐心等待遍历%cd%,根据目录大小硬盘灯亮完开始闪就快了.....
[ Last edited by 9zhmke on 2008-3-22 at 04:02 AM ]作者: plp626 时间: 2008-3-22 04:21 和楼主比我真是个新人,指教真是不敢当...
---------------------------------------------
rem setlocal enabledelayedexpansion
换成
setlocal enabledelayedexpansion
再将cd %%p~dpi
换成cd !paths!
试试
-----------------------------------------
cd %%p~dpi
这句?是笔误吧?
应该是cd %%~dpi
[ Last edited by plp626 on 2008-3-22 at 04:27 AM ]作者: 9zhmke 时间: 2008-3-22 13:44 换了,那个%%p是不小心打错了。
用cd %%~dpi可以进,但cd !paths!不能进,cd %paths%也不能进,还是在原地没动,通过调试后知道一点了,在这里用了cd后,如果退出批处理,会被退到原文件夹下,也就是说当时已经进了这个目录了....继续改动....整体可以基本看到我的思路了,到时候再加入其他功能,但是一调试,居然出了个“此时不应有 )。”真是莫名其妙,再次昏死。
看来是for和if里不能嵌入goto,没办法,只有展开了,但是展开后居然又出了个不可思议的错误!
echo off
d:
rem del "C:\Documents and Settings\All Users\桌面\*.lnk"
rem del "C:\Documents and Settings\All Users\桌面\*.url"
cd\tools
set filetmp=
set i=
set j=
setlocal enabledelayedexpansion
cls
:BEGIN
for /f "delims=" %%i in ('dir *.lnk *.url /s /b') do (
rem 上面一句取得tools下每一文件快捷方式文件路径+文件名,路径=%%~dpi,文件名=%%~nxi
set filetmp=%%i
cd %%~dpi
rem 上面一句进到目录中,下面一句查看lnk文件中是否有本文件夹的快捷路径,如果有会返回0就直接跳到COPYFILE复制文件
find %%~nxi /c /i "%%~dpi"
if %errorlevel%==0 (
copy !filetmp! "C:\Documents and Settings\All Users\桌面\"
if %%~nxi==kl.url goto :eof &&在这里,一个网站的url文件通过了!经测试在文件夹内用find没找到字串的确返回的是1,这个网站的URL里怎么可能通过find %%~nxi /c /i "%%~dpi"?
界面里出现的内容:
---------- 360SAFE.EXE.LNK: 1
已复制 1 个文件。
---------- 美案方案书制作.LNK: 1
已复制 1 个文件。
---------- KL.URL: 0
已复制 1 个文件。
D:\Tools>
) else (
echo 找到的文件没对头
goto :eof
find %%i /c /i "http://"
rem 如果是1则是网站广告,就不管了
if "%errorlevel%"=="0" goto :eof&&rem call :MAKEURL %%i
)
)
goto END
:MAKEURL
rem 下面找出快捷指向且只抽取出文件名,如果这个执行文件不存在就直接跳过复制到NOCOPY
for /f "delims=" %%j in ('find ":" "%%1" ^|findstr /r "^[A-z]:[\\]"') do (
set filetmp=%%1
if not exist %%~nxj goto NOCOPY
echo %%1快捷方式文件中路径不正确,正在更正&&rem 下面一句把扩展名换成.url,有些快捷方式被改成中文,所以保持原名
set filetmp=%%filetmp:~0,-4%.url
rem 以下几句生成url文件
(echo [InternetShortcut]
echo URL=File:///%%~dpi%%~dpj
echo WorkingDirectory=%%~dpi
echo ShowCommand=
echo IconFile=%%~dpi%%~dpj
echo IconIndex=^0
echo HotKey=)>"!filetmp!"
)
copy !filetmp! "C:\Documents and Settings\All Users\桌面\"
:END
[ Last edited by 9zhmke on 2008-3-22 at 06:20 PM ]作者: 9zhmke 时间: 2008-3-22 15:59 ....继续,前面部分对了,就差对错误路径的揪正了,又遇到个难题
echo off
d:
del "C:\Documents and Settings\All Users\桌面\*.lnk"
del "C:\Documents and Settings\All Users\桌面\*.url"
cd\tools
set filetmp=
set find=
set i=
set j=
setlocal enabledelayedexpansion
cls
:BEGIN
for /f "delims=" %%i in ('dir *.lnk *.url /s /b') do (
rem 上面一句取得tools下每一文件快捷方式文件路径+文件名,路径=%%~dpi,文件名=%%~nxi
set filetmp=%%i
cd %%~dpi
rem 上面一句进到目录中,下面一句查看lnk文件中是否有本文件夹的快捷路径,如果有会返回0就直接跳到COPYFILE复制文件
for /f "delims=" %%j in ('find %%~nxi /c /i "%%~dpi"') do set find=%%j
set find=!find:~-1!
if !find! gtr 0 (
echo 正在复制!filetmp!
copy !filetmp! "C:\Documents and Settings\All Users\桌面\"
) else (
echo 找到的文件没对头:%%~nxi
for /f "delims=" %%j in ('find !filetmp! /c /i "http://"') do set find=%%j
set find=!find:~-1!
rem 如果是1则是网站广告就不管了,不是再花工夫去找
if !find! equ 0 call :MAKEURL
)
)
goto END
:MAKEURL
rem 下面找出快捷指向且只抽取出文件名,如果这个执行文件不存在就直接跳过复制到NOCOPY
find ":" !filetmp!|findstr /r "^[A-z]:[\\]" 上面这句得出的结果后下面这句得出的结果不一样?
for /f "delims=" %%j in ('find ":" !filetmp!^|findstr /r "^[A-z]:[\\]"') do (
echo %%j
pause
if not exist %%~nxj goto NOCOPY
echo %%j快捷方式文件中路径不正确,正在更正&&rem 下面一句把扩展名换成.url,有些快捷方式被改成中文,所以保持原名
set filetmp=!filetmp:~0,-4!.url
echo 新生成的文件是:!filtmp!
rem 以下几句生成url文件
(echo [InternetShortcut]
echo URL=File:///%%~dpi%%~dpj
echo WorkingDirectory=%%~dpi
echo ShowCommand=
echo IconFile=%%~dpi%%~dpj
echo IconIndex=^0
echo HotKey=)>"!filetmp!"
)
copy !filetmp! "C:\Documents and Settings\All Users\桌面\"
:END
[ Last edited by 9zhmke on 2008-3-22 at 06:39 PM ]作者: 9zhmke 时间: 2008-3-23 02:09 拦路虎,惹不起我躲还不行么,绕个弯,妈的还有问题:
echo off
d:
del "C:\Documents and Settings\All Users\桌面\*.lnk"
del "C:\Documents and Settings\All Users\桌面\*.url"
cd\tools
set filetmp=
set i=
set j=
set k=
set cp=
setlocal enabledelayedexpansion
cls
:BEGIN
for /f "delims=" %%i in ('dir *.lnk *.url /s /b') do (
del c:\tmp.log >nul 2>nul
set filetmp=%%i&&set j=&&set cp=
rem 上面一句取得tools下每一文件快捷方式文件路径+文件名,路径=%%~dpi,文件名=%%~nxi
cd %%~dpi
rem 上面一句进到目录中,下面一句查看lnk文件中是否有本文件夹的快捷路径,如果有会返回0就直接跳到COPYFILE复制文件
[ Last edited by 9zhmke on 2008-3-23 at 02:10 AM ]作者: 9zhmke 时间: 2008-3-23 02:46 终于基本完成,但还没有完善有些空格会有故障的问题。程序段在第一贴。作者: 9zhmke 时间: 2008-3-23 15:55 在find 中把文件和字串搞返了也可以成功,但会造成兼容性问题,以后大家不要步我后尘啊,费了好多功夫才查出来,字串必须写前面,文件名放到后面去。
请朋友们指正下吧,没什么大问题了
[ Last edited by 9zhmke on 2008-3-23 at 05:51 PM ]