[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[其他] 求bat脚本可以获取某软件安装根目录

本帖最后由 jack2023 于 2023-5-16 17:46 编辑

求高手写一个bat  要求获取改成通用的软件的根目录,并在后面对这个目录进行相关复制、剪切等操作,如何引用这个获取的目录?
例如:
可以获取某软件(比如QQ)的安装根目录,并在其根目录下面新建1个文件夹123。自己网上整合了1个,发现无法识别目录,求高手指教修改一下哈。
  1. @echo off&cd /d "%~dp0"
  2. :: 获取xxx安装目录
  3. set "reg=HKEY_LOCAL_MACHINE\SOFTWARE\QQ"
  4. :: 获取QQ安装目录
  5. for /f "skip=2 tokens=3,*" %%i in ('reg query %reg% /s') do (
  6.     set destPath=%%i %%j
  7.     :: 验证是否是目录
  8.     echo %%i | findstr : >nul && (
  9.         goto back
  10.     )
  11. )
  12. :back
  13. echo %destPath%
  14. md "%destPath%\123\"
  15. pause
  16. exit
复制代码
比如,从桌面QQ快捷方式获取的文件位置为
    "D:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
则根目录为   D:\Program Files (x86)\Tencent\QQ\Bin\
然后写代码在这个根目录下面新建1个文件名为123的文件夹。

  1. @echo off
  2. set "scfile=QQ"
  3. for %%i in ("%USERPROFILE%\Desktop\") do set "scp=%%~pi"
  4. if exist %USERPROFILE%\Desktop\*%scfile%*.lnk (
  5. set "scp=%scp:\=\\%"
  6. ) else if exist %PUBLIC%\Desktop\*%scfile%*.lnk (
  7. set "scp=\\users\\public\\desktop\\"
  8. ) else (echo,%scfile% is nonexistent&pause&exit)
  9. set "scfile=%%%scfile%%%"
  10. for /f "tokens=2 delims==" %%i in ('wmic path win32_shortcutfile where "Path='%scp%' and extension='LNK' and FileName like '%scfile%'" get target /value') do (
  11. echo,"%%~dpi"
  12. md "%%~dpi123"
  13. )
  14. pause
复制代码
1

评分人数

TOP

回复 18# jack2023


    双击执行,拖动快捷方式到窗口,回车。
1

评分人数

    • jack2023: 拖入可以用,谢谢,能改成套娃式,可以自己 ...技术 + 1

TOP

回复 22# terse


    估计是要改成支持拖放的比较方便

QQ 20147578

TOP

本帖最后由 terse 于 2023-5-17 12:34 编辑

回复 21# jack2023
把快捷方式图标拖进去处理
  1. @set @i=0 /* & @echo off&cscript -E:JScript -nologo %0 %* & pause & exit */
  2. var ws = new ActiveXObject("WScript.Shell");
  3. var fso = new ActiveXObject("Scripting.FileSystemObject");
  4. for (var i = 0; i < WSH.Arguments.length; i++)
  5. {
  6.       var ink = ws.CreateShortcut(WSH.Arguments(i));
  7.       var folder = fso.GetParentFolderName(ink.TargetPath);
  8.       var newFolder = fso.BuildPath(folder, "new_folder");
  9.       if (!fso.FolderExists(newFolder)) fso.CreateFolder(newFolder);
  10. }
复制代码

TOP

回复 20# terse


    谢谢大佬,这个可以读取桌面的所有快捷方式的名称及路径,我的意思是需要某一个自定义的快捷方式,
比如:搜狗高速浏览器
C:\Users\Administrator\Desktop\搜狗高速浏览器.lnk
D:\Program Files\sougou\SogouExplorer\SogouExplorer.exe
D:\Program Files\sougou\SogouExplorer
比如我需要读取这个的   搜狗高速浏览器.lnk的根目录为 D:\Program Files\sougou\SogouExplorer
并在根目录下面新建1个123的文件夹



麻烦帮忙完善一下代码,谢谢

TOP

这个应该能满足需求
  1. @set @i=0 /* & @echo off&cscript -E:JScript -nologo %0 & pause & exit */
  2. var shell = WScript.CreateObject("WScript.Shell");
  3. var desktopPath = shell.SpecialFolders("Desktop");
  4. var fso = new ActiveXObject("Scripting.FileSystemObject");
  5. var folder = fso.GetFolder(desktopPath);
  6. var files = new Enumerator(folder.Files);
  7. for (; !files.atEnd(); files.moveNext()) {
  8.     var file = files.item();
  9.     if (file.Name.toLowerCase().indexOf(".lnk") == file.Name.length - 4) {
  10.         var ink = shell.CreateShortcut(file.Path);
  11.         var target = ink.TargetPath;
  12.         if (target) {
  13.             var targetfolder = fso.GetParentFolderName(ink.TargetPath);
  14.             WSH.Echo(file.Path, '\n', target, '\n', targetfolder, '\n');
  15.        }
  16.     }
  17. }
复制代码

TOP

回复 18# jack2023


建议以后不要再说“不行”、“一闪而过”、“没有反应”之类的话,因为这对于想要给你进一步帮助的人来说没有任何意义。希望大家都能学会的一个知识点是:如何查看代码的报错信息。

如果你在执行.bat脚本,请参考Q-01观察一下哪行代码在报错以及详细的报错信息:
https://mp.weixin.qq.com/s/Koje4FufWxWBs7ioDy_LJA
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

回复 16# buyiyang

好像不行呢  大佬 看下哪里填错了

TOP

本帖最后由 jack2023 于 2023-5-16 22:26 编辑

好像不行呢  大佬 看下哪里填错了

TOP

  1. @echo off
  2. set /p scfile=
  3. set scfile=%scfile:\=\\%
  4. set scfile=%scfile:"=%
  5. for /f "tokens=2 delims==" %%i in ('wmic path win32_shortcutfile where "name='%scfile%'" get target /value') do (
  6. echo,"%%~dpi"
  7. md "%%~dpi123"
  8. )
  9. pause
复制代码

TOP

回复 13# czjt1234

比如,从桌面QQ快捷方式获取的文件位置为
    "D:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
则根目录为   D:\Program Files (x86)\Tencent\QQ\Bin\
然后写代码在这个根目录下面新建1个文件名为123的文件夹。

TOP

本帖最后由 jack2023 于 2023-5-16 17:30 编辑

回复 13# czjt1234

比如,从桌面QQ快捷方式获取的文件位置为
    "D:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
则根目录为   D:\Program Files (x86)\Tencent\QQ\Bin\
然后写代码在这个根目录下面新建1个文件名为123的文件夹。

TOP

"D:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe"
哪个是根目录?
Tencent
Tencent\QQ
Tencent\QQ\Bin

QQ 20147578

TOP

回复 11# czjt1234


    可以从桌面快捷方式,大佬能否帮我写个bat,读出快捷方式的根目录,并对在这个根目录下面新建1个123的文件夹。谢谢!

TOP

返回列表