标题: [其他] [已解决]求EXE程序批量创建快捷方式到指定文件夹并一一对应 [打印本页]
作者: 大地 时间: 2020-4-14 11:22 标题: [已解决]求EXE程序批量创建快捷方式到指定文件夹并一一对应
本帖最后由 大地 于 2020-4-28 08:08 编辑
求EXE程序批量创建快捷方式到指定文件夹并一一对应
重新整理一下
源: →→→目标:
工具目录包TOOLS1112222及内EXE →→→ ①PE桌面 工具目录包TOOLS1112222及内部快捷方式
(任意位置,
当然在分区根目录寻找很快) ②所有程序:工具目录包TOOLS1112222及内部快捷方式
③自定义某几个快捷方式至PE桌面
例:DG.exe,nap.exe,QQ.exe
源文件夹与目标新文件夹一一对应
源文件夹下的EXE与目标新文件夹下的EXE的快捷方式所在位置一一对应
经反复实践测试:无缝创建完美运行,再次感谢went的多次、耐心、无私奉献。
完整代码至本贴末尾见went发布的。
(由于精简系统缺少组件等原因,运行本代码会遇到“设备不支持符号链接“时,需要补全DLL文件才行)
作者: went 时间: 2020-4-15 11:49
- @echo off
- REM exe folder
- set "dir=C:\Users\lenovo\Desktop\0"
- REM mklink
- for /r "%dir%" %%i in ("*.exe") do mklink "%userprofile%\desktop\%%~ni" "%%~i"
- pause&exit
复制代码
作者: 大地 时间: 2020-4-15 19:45
大神 我试了一下没成功啊 能不能抽空邦我查一下原因吗 谢谢
1、这个A文件夹不固定在哪里 还要寻找一下才行
2、还可能有子目录下的EXE
你的代码我试了 没反应 还有你的 “lenovo” 是什么没理解
通常是 set "dir=C:\Users\Default\Desktop\0"
作者: went 时间: 2020-4-15 20:55
本帖最后由 went 于 2020-4-15 20:57 编辑
回复 3# 大地
你要说明你的A文件夹根据什么特征去搜索,整个硬盘又不是只有一个A文件夹
或者你搜索到A文件夹然后吧楼上的dir修改为你的A文件夹路径
作者: 大地 时间: 2020-4-15 23:16
回复 4# went
大师 上面代码是正确的 刚才是我操作不正确
就是想能不能更新一下
1、这个 “A”文件夹 可能在 C盘 可能在D盘,可能在E盘…………
没绝对路径, 能否更新一下
(不论何种扫描 只要找到该文件夹就行)
2、能否对每个EXE再带个图标显示 *.ico
作者: went 时间: 2020-4-16 14:29
回复 5# 大地
你就只给一个文件夹名怎么去定位?
搜索到多个同名文件夹怎么确定那个是你需要的
作者: 大地 时间: 2020-4-16 15:12
本帖最后由 大地 于 2020-4-16 15:26 编辑
回复 6# went
大师 应该我说得不清楚,重新理一遍
我是想这样操作:
假设 C盘上有这个文件夹 TOOLS1112222 (没有重名,整个电脑仅为此一个文件夹)
这个文件夹有时在D盘 有时在E盘 不确定....不过应该都在分区根目录
这个TOOLS1112222文件夹有子目录
我想在PE系统的桌面上有这个 TOOLS1112222 空文件夹 把 源TOOLS1112222 里面的EXE执行文件生成的全部快捷方式复制过来到PE,并且按不同的文件夹及子目录分别一一对应存放,同时也补全各级文件夹及目录,
简单说 源文件夹有EXE 目标文件夹为快捷方式,各级一一对应
麻烦大师 再帮我写一个吧 谢谢
作者: went 时间: 2020-4-16 16:23
本帖最后由 went 于 2020-4-16 16:47 编辑
回复 7# 大地
drivers最好别添加系统盘符,不然查找起来很慢- @echo off
- REM search drivers
- set "drivers=D E F G H I J K L M N O P Q R S T U V W X Y Z"
- REM exe foldername
- set "folderName=TOOLS1112222"
- REM start
- for %%i in (%drivers%) do (
- cd /d "%%i:\" 2>nul && (
- echo search %%i: please wait...
- for /r /d %%a in ("*") do (
- if "%%~na" equ "%folderName%" (
- set "folder=%%~a"
- goto :done
- )
- )
- )
- )
- :done
- if "%folder%"=="" echo %folderName% not found! & pause&exit
- echo -------------
- echo "folder=%folder%"
- echo -------------
- for /r "%folder%" %%i in ("*.exe") do (
- echo mklink: %%~i
- call set "exe=%%~i"
- call set "tag=%USERPROFILE%\desktop\%folderName%%%exe:%folder%=%%"
- call mkdir %%tag:%%~nxi=%% >nul 2>nul
- call mklink "%%tag:~0,-4%%" "%%~i" >nul
- )
- pause&exit
复制代码
作者: 大地 时间: 2020-4-16 19:23
回复 8# went
谢谢大师 成功了 大师很厉害,代码这么长我都看不懂,我要好好慢慢地去研究学习这些代码 为大师赞一个
作者: 大地 时间: 2020-4-17 16:59
回复 8# went
大神 空的时候能不能再帮我优化一下:
1、TOOLS1112222通常放在 盘符根目录
程序优先搜索 C盘根目录 没有再搜索D盘根目录 再搜索E盘根目录 再搜索F盘根目录
再搜索G盘根目录, 就这五个, 如果实在没有搜索到, 再用上面的代码进行深层搜索,
这样大大加快运行速度
(因为TOOLS1112222通常放在 盘符根目录,大多数情况电脑一般分5个区最多了)
2、上面代码运行时 出现个别目录无法创建快捷方式,不知是权限问题还是其它问题
后我用 xcopy **** /e/t 先复制空目录 再用上面的代码 就完整创建所有的快捷方式,
再次谢谢!!
作者: went 时间: 2020-4-17 21:25
回复 10# 大地
手机写未测试
第六行下面插入一行- for %%i in (%drivers%) do if exist "%%i:\%folderName%" set "folder=%%i:\%folderName%" && goto :done
复制代码
作者: 大地 时间: 2020-4-18 11:29
本帖最后由 大地 于 2020-4-18 11:49 编辑
回复 11# went
大师 让你见笑了 还是有两个问题要向你请教:
1、上面代码运行时 出现个别目录无法创建快捷方式,不知是权限问题还是其它问题
后我用 xcopy **** /e/t 先复制空目录 再用上面的代码 就完整创建所有的快捷方式,
我自个想加个xcopy 可不知道放哪个位置 一直没搞定
2、 第26行后加入 call set "tag=X:\ProgramData\Microsoft\Windows\Start Menu\Programs\%folderName%%%exe:%folder%=%%"
显示运行错误 该如何修改加入?
再次麻烦大师
作者: went 时间: 2020-4-18 11:57
权限问题- @echo off
- REM Admin
- %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
- REM search drivers
- set "drivers=C D E F G H I J K L M N O P Q R S T U V W X Y Z"
- REM exe foldername
- set "exeFolderName=TOOLS1112222"
- REM main foldername
- set "linkFolderName=C:\ProgramData"
- REM start
- for %%i in (%drivers%) do if exist "%%i:\" (
- set /p="check:%%i:\%exeFolderName% "<nul
- if exist "%%i:\%exeFolderName%" (
- echo OK!
- set "folder=%%i:\%exeFolderName%"
- goto :done
- ) else echo not found!
- )
- echo -------------
- for %%i in (%drivers%) do (
- cd /d "%%i:\" 2>nul && (
- echo search %%i: please wait...
- for /r /d %%a in ("*") do (
- if "%%~na" equ "%exeFolderName%" (
- set "folder=%%~a"
- goto :done
- )
- )
- )
- )
- :done
- if "%folder%"=="" echo %exeFolderName% not found! & pause&exit
- echo -------------
- echo "folder=%folder%"
- echo -------------
- for /r "%folder%" %%i in ("*.exe") do (
- echo mklink: %%~i
- call set "exe=%%~i"
- call set "link=%linkFolderName%\%exeFolderName%\%%exe:%folder%\=%%"
- call mkdir "%%link:%%~nxi=%%" >nul 2>nul
- call mklink "%%link:~0,-4%%" "%%~i" >nul
- )
- pause&exit
复制代码
作者: 大地 时间: 2020-4-20 09:19
本帖最后由 大地 于 2020-4-20 21:19 编辑
回复 13# went
大师 再次让你见笑了 没完没了 哈哈
在多个实体硬盘、U盘上的目录间任意传送,完美运行,但在实体盘上目录传送到内存系统(PE或ramos)的目录上,显示不支付该设备连接,无法创建。
经反复检查 最后搞清楚是系统问题,与大神代码无关, 大神代码可以完美运行,再次表示感谢。
1、我想一次两用,传送到桌面的同时,也同时发送到所有程序里面。当然可以运行两次,但我想简洁一点。如何修改?
大神 谢谢了。
作者: 大地 时间: 2020-4-20 21:20
本帖最后由 大地 于 2020-4-20 21:21 编辑
回复 13# went
大师 再次让你见笑了 没完没了 哈哈
在多个实体硬盘、U盘上的目录间任意传送,完美运行,但在实体盘上目录传送到内存系统(PE或ramos)的目录上,显示不支付该设备连接,无法创建。
经反复检查 最后搞清楚是系统问题,与大神代码无关, 大神代码可以完美运行,再次表示感谢。
1、我想一次两用,传送到桌面的同时,也同时发送到所有程序里面。当然可以运行两次,但我想简洁一点。如何修改?
大神 谢谢了。
作者: went 时间: 2020-4-20 23:14
文件夹按照9-10行的格式添加
set "linkFolderName序号=路径"- @echo off
- REM Admin
- %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
- REM search drivers
- set "drivers=C D E F G H I J K L M N O P Q R S T U V W X Y Z"
- REM exe foldername
- set "exeFolderName=TOOLS1112222"
- REM main foldername
- set "linkFolderName1=C:\Users\lenovo\Desktop\1"
- set "linkFolderName2=C:\Users\lenovo\Desktop\2"
- REM start
- for %%i in (%drivers%) do if exist "%%i:\" (
- set /p="check:%%i:\%exeFolderName% "<nul
- if exist "%%i:\%exeFolderName%" (
- echo OK!
- set "folder=%%i:\%exeFolderName%"
- goto :done
- ) else echo not found!
- )
- echo -------------
- for %%i in (%drivers%) do (
- cd /d "%%i:\" 2>nul && (
- echo search %%i: please wait...
- for /r /d %%a in ("*") do (
- if "%%~na" equ "%exeFolderName%" (
- set "folder=%%~a"
- goto :done
- )
- )
- )
- )
- :done
- if "%folder%"=="" echo %exeFolderName% not found! & pause&exit
- echo -------------
- echo "folder=%folder%"
- echo -------------
- for /r "%folder%" %%i in ("*.exe") do (
- echo mklink: %%~i
- call set "exe=%%~i"
- for /f "tokens=2 delims==" %%a in ('set linkFolderName') do (
- call set "link=%%a\%exeFolderName%\%%exe:%folder%\=%%"
- call mkdir "%%link:%%~nxi=%%" >nul 2>nul
- call mklink "%%link:~0,-4%%" "%%~i" >nul
- )
- )
- pause&exit
复制代码
作者: 大地 时间: 2020-4-22 13:57
本帖最后由 大地 于 2020-4-23 11:14 编辑
回复 16# went
大神 :
从搜索到的TOOLS1112222的文件夹的EXE发送快捷方式至 "桌面" 和 "所有程序" 后,我还想
从TOOLS1112222这个总文件夹中 挑选 其中三个特定的文件的快捷方式到桌面上
TOOLS1112222\分区工具\DG.exe
\截图工具\nap.exe
\其它\QQ.exe
................
该如何添加?
作者: 大地 时间: 2020-4-23 11:15
回复 16# went
从搜索到的TOOLS1112222的文件夹的EXE发送快捷方式至 "桌面" 和 "所有程序" 后,我还想
从TOOLS1112222这个总文件夹中 挑选 其中三个特定的文件的快捷方式到桌面上
TOOLS1112222\分区工具\DG.exe
\截图工具\nap.exe
\其它\QQ.exe
................
该如何添加?
大神再帮我解决一下吧 再次感谢!!
作者: went 时间: 2020-4-23 22:28
回复 18# 大地
16楼代码
10行下面加上以下代码,这是特殊exe的相对路径,?分隔- REM esp exe
- set "espExe=\分区工具\DG.exe?\截图工具\nap.exe?\其它\QQ.exe?\新建文件夹\handle64.exe?\新建文件夹\CPU-V.exe"
复制代码
39行下面加上以下代码- call echo %espExe% | call findstr /i /C:"%%exe:%folder%\=%%" >nul 2>nul && (
- call echo add %userprofile%\desktop
- mklink "%userprofile%\desktop\%%~ni" "%%~i" >nul
- )
复制代码
ANSI保存
作者: 大地 时间: 2020-4-24 08:50
回复 19# went
老师 加入上面的两个代码 运行闪屏不反应, 没有加入上面两个代码时仍运行正常
作者: went 时间: 2020-4-25 16:49
回复 20# 大地
ANSI编码
作者: 大地 时间: 2020-4-25 18:30
本帖最后由 大地 于 2020-4-25 18:57 编辑
回复 21# went
按ANSI保存不能运行无反应
按UTF-8保存,能运行,但显示在C盘根目录找不到,但实际在C盘根目录上有该文件夹
按BOM的UTF-8保存,运行一直滚动不停止
上述操作在完整版的WIN10中试也不行
作者: went 时间: 2020-4-26 09:46
本帖最后由 went 于 2020-4-26 09:48 编辑
ANSI保存,再不行我也没招了- @echo off
- REM Admin
- %1 start "" mshta vbscript:createobject("shell.application").shellexecute("""%~0""","REM",,"runas",1)(window.close)&exit
- REM search drivers
- set "drivers=C D E F G H I J K L M N O P Q R S T U V W X Y Z"
- REM exe foldername
- set "exeFolderName=TOOLS1112222"
- REM main foldername
- set "linkFolderName1=C:\Users\lenovo\Desktop\1"
- set "linkFolderName2=C:\Users\lenovo\Desktop\2"
- REM esp exe
- set "espExe=\分区工具\DG.exe?\截图工具\nap.exe?\其它\QQ.exe"
- REM start
- for %%i in (%drivers%) do if exist "%%i:\" (
- set /p="check:%%i:\%exeFolderName% "<nul
- if exist "%%i:\%exeFolderName%" (
- echo OK!
- set "folder=%%i:\%exeFolderName%"
- goto :done
- ) else echo not found!
- )
- echo -------------
- for %%i in (%drivers%) do (
- cd /d "%%i:\" 2>nul && (
- echo search %%i: please wait...
- for /r /d %%a in ("*") do (
- if "%%~na" equ "%exeFolderName%" (
- set "folder=%%~a"
- goto :done
- )
- )
- )
- )
- :done
- if "%folder%"=="" echo %exeFolderName% not found! & pause&exit
- echo -------------
- echo "folder=%folder%"
- echo -------------
- for /r "%folder%" %%i in ("*.exe") do (
- echo mklink: %%~i
- call set "exe=%%~i"
- call echo %espExe% | call findstr /i /C:"%%exe:%folder%\=%%" >nul 2>nul && (
- call echo add %userprofile%\desktop
- mklink "%userprofile%\desktop\%%~ni" "%%~i" >nul
- )
- for /f "tokens=2 delims==" %%a in ('set linkFolderName') do (
- call set "link=%%a\%exeFolderName%\%%exe:%folder%\=%%"
- call mkdir "%%link:%%~nxi=%%" >nul 2>nul
- call mklink "%%link:~0,-4%%" "%%~i" >nul
- )
- )
- pause&exit
复制代码
作者: 大地 时间: 2020-5-3 09:17
回复 23# went
大师:
这个版本很好,很实用,很方便,就是能不能用Shortcut.exe替换mklink,一个是mklink版本,一个是shortcut版本,多一个版本,多一个选择。相互取长补短,适应不同的环境,不同的系统。
作者: went 时间: 2020-5-3 16:59
回复 24# 大地
这是第三方工具,具体没用过
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |