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

[文件操作] 求个批处理:将当前路径下的某个文件夹创建快捷方式,然后发送到指定路径?

[复制链接]
 楼主| 发表于 2025-7-7 00:55:59 | 显示全部楼层
回复  ednykissyou

照以下步骤》先开启cmd管理员窗口,在命令行上直接运行 cd /d d:\abc,其中 d:\abc  ...
aloha20200628 发表于 2025-7-7 00:34

刚试了,可行。
可是,这些如何转变为代码,不然对普通人他没有意义啊
 楼主| 发表于 2025-7-7 01:18:06 | 显示全部楼层
本帖最后由 ednykissyou 于 2025-7-7 01:52 编辑
回复  ednykissyou

照以下步骤》先开启cmd管理员窗口,在命令行上直接运行 cd /d d:\abc,其中 d:\abc  ...
aloha20200628 发表于 2025-7-7 00:34



    大神,帮看一下这个,我直接改那个目录好像不对,你能结合你的代码,你一定能帮我解决这个问题
http://www.bathome.net/viewthrea ... mp;extra=#pid289560

还有这个我没看大懂
https://blog.csdn.net/xundao255/article/details/98727676

这个好像也支持长文件名 可惜双击后没反应
https://blog.csdn.net/yan_onion/article/details/13240091
发表于 2025-7-7 10:27:01 | 显示全部楼层
都是高手
我从头看到尾看了2遍,愣是没搞清楚楼主的需求是什么
发表于 2025-7-7 10:43:26 | 显示全部楼层
回复 31# ednykissyou

   只要在代码第一行定义快捷方式的目标目录 a, b 的全路径名就省事多了,无论在已打开的管理员CMD窗口中运行,还是直接用右键管理员身份启运批处脚本均可...
   关键是运行批处脚本之前要把第一行中的 set "Da=d:\xyz\a" &set "Db=d:\xyz\b" 改为 a, b 的真实完整路径
   订正的代码如下

  1. @echo off &setlocal &set "Da=d:\xyz\a" &set "Db=d:\xyz\b"
  2. if "%~1" neq "" set "Da=%~1"
  3. if "%~2" neq "" set "Db=%~2"
  4. powershell "$ws=new-object -comobject wscript.shell;('%Da%','%Db%')|%%{$sc=$ws.createshortcut($_+'.lnk');$sc.targetpath=$_;$sc.save()}"
  5. if not exist "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel" goto :next
  6. set/p "r=将删除 C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel 中的全部内容(1=是,0=否):"
  7. if %r% neq 1 goto :next
  8. del /q "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel\*.*"
  9. pushd "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel"
  10. rd /q /s "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel" 2>nul
  11. popd
  12. :next
  13. for /f "delims=" %%d in ('dir /b/s/ad "C:\Program Files\Adobe\*Scripts Panel"^|findstr /irc:"Adobe InDesign 202[0-9]" ') do for %%F in ("%Da%", "%Db%") do copy /y "%%~F.lnk" "%%d"
  14. pause&exit/b
复制代码
以上代码亦可用命令行参数定义第一行的变量值 Da, Db,如在CMD管理员窗口中的命令行启运批处脚本(假设其名为 d:\xyz\test.bat)的格式为

  1. d:\xyz\test.bat "d:\123\a" "d:\123\b"
复制代码
发表于 2025-7-7 11:37:43 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-7-7 11:47 编辑

回复 32# ednykissyou

创建及保存快捷方式到指定目录和将其复制到指定目录(如桌面或普通目录)都是一步到位的简单操作,但是要保存的目录(如 c:\windows\system32)或被直接复制到的目录(例如 C:\Program Files\...)是被保护的目录,就有问题,简单解法就是将快捷方式保存到普通目录,并在管理员窗口中完成复制快捷方式的操作,新订正的34楼代码就是基于此理。
发表于 2025-7-7 12:20:21 | 显示全部楼层
本帖最后由 77七 于 2025-7-7 12:22 编辑
  1. @echo off & FLTMC>nul||(mshta vbscript:CreateObject^("Shell.Application"^).ShellExecute^("%~snx0"," %*","","runas",1^)^(window.close^)&&exit /b)
  2. rem 保存为ansi编码
  3. cd /d "%~dp0"

  4. rem 需要的快捷方式路径
  5. set list="aa" "bb"

  6. rem 预设软件路径 或 获取拖放路径
  7. if "%~1" neq "" (
  8.         set "folder_adobe=%~1"
  9. ) else (
  10.         set "folder_adobe=C:\Program Files\Adobe"
  11. )

  12. rem 预设软件脚本目录名
  13. set "folder_scripts=Scripts Panel"

  14. for /f "delims=" %%i in ('2^>nul dir /b /s /ad "%folder_adobe%\%folder_scripts%*"') do (
  15.         if /i "%%~nxi" equ "%folder_scripts%" (
  16.                 set m=1
  17.                 echo 将在 目录[%%i] 下创建快捷方式
  18.                 choice /m "确认请按 Y,否请按 N"
  19.                 if errorlevel 1 (
  20.                         if not errorlevel 2 (
  21.                                 echo 将删除 目录[%%i] 下所有文件(包括子目录)
  22.                                 choice /m "确认请按 Y,否请按 N"
  23.                                 if errorlevel 1 (
  24.                                         if not errorlevel 2 (
  25.                                                 rd /s /q "%%i"
  26.                                                 md "%%i"
  27.                                         )
  28.                                 )
  29.                                 for %%a in (%list%) do (
  30.                                         if exist "%%~a" (
  31.                                                 echo 正在创建快捷方式 [%%~a]
  32.                                                 mshta VBScript:Execute("Set a=CreateObject(""WScript.Shell""):Set b=a.CreateShortcut("^
  33.                                                 "%%i\%%~nxa.lnk""):b.TargetPath=""%%~fa"":b.WorkingDirectory=""%%~dpa"":b.Save:close"^)
  34.                                                 if exist "%%i\%%~nxa.lnk" (
  35.                                                         echo 操作成功
  36.                                                 ) else (
  37.                                                         echo 操作失败
  38.                                                 )
  39.                                         ) else (
  40.                                                 echo 未找到 [%%~a] ,请检查路径
  41.                                         )
  42.                                 )
  43.                         )
  44.                 )
  45.                 echo=
  46.                 echo=
  47.         )
  48. )
  49. if not defined m (
  50.         if "%~1" equ "" (
  51.                 echo 未在 预设路径"[%folder_adobe%]" 下找到 目录"[%folder_scripts%]"
  52.                 echo 请修改 预设路径 或 拖动 目录[Adobe] 到批处理文件打开
  53.         ) else (
  54.                 echo 未在 拖放目录"[%folder_adobe%]" 下找到 目录"[%folder_scripts%]"
  55.                 echo 请确认 拖动目录 是否正确显示,如果不正确,请直接在代码中修改 预设软件路径;如果正确,请修改 预设软件脚本目录名
  56.         )
  57. )
  58. pause
复制代码


写了个几乎面面俱到的代码,也希望楼主能在论坛内学习到一点东西,不能注册10多年,批处理文件编码都搞不清楚吧!

另外提醒,删除目录 存在风险
发表于 2025-7-7 16:07:05 | 显示全部楼层
本帖最后由 aloha20200628 于 2025-7-7 16:10 编辑

回复 18# ednykissyou

如果真如18,21楼所述,快捷方式对应的完整路径名只能在用户运行批处脚本时确定,那就让批处运行开始先提示用户输入指定这两个完整路径名,其余如开启CMD管理员窗口,创建快捷方式,.... 等等,均由批处自己搞定了,如此批处脚本在哪个目录启运均可。试试以下新版代码

  1. @echo off &setlocal
  2. %~1 powershell "start -file '%~f0' -arg '::' -verb runas" &exit/b
  3. :Loop#1
  4.    set/p "Da=请输入指定快捷方式对应的第一个目录:"
  5.    set "Da=%Da:"=%"
  6.    if not exist "%Da%" echo,指定目录不存在,重新指定&goto :Loop#1
  7. :Loop#2
  8.    set/p "Db=请输入指定快捷方式对应的第二个目录:"
  9.    set "Db=%Db:"=%"
  10.    if not exist "%Db%" echo,指定目录不存在,重新指定&goto :Loop#2
  11. powershell "$ws=new-object -comobject wscript.shell;('%Da%','%Db%')|%%{$sc=$ws.createshortcut($_+'.lnk');$sc.targetpath=$_;$sc.save()}"
  12. if not exist "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel" goto :next
  13. set/p "r=将删除 C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel 中的全部内容(1=是,0=否):"
  14. if %r% neq 1 goto :next
  15. del /q "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel\*.*"
  16. pushd "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel"
  17. rd /q /s "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel" 2>nul
  18. popd
  19. :next
  20. for /f "delims=" %%d in ('dir /b/s/ad "C:\Program Files\Adobe\*Scripts Panel"^|findstr /irc:"Adobe InDesign 202[0-9]" ') do for %%F in ("%Da%", "%Db%") do copy /y "%%~F.lnk" "%%d"
  21. pause&exit/b
复制代码
 楼主| 发表于 2025-7-7 18:57:38 | 显示全部楼层
本帖最后由 ednykissyou 于 2025-7-7 19:08 编辑
回复  ednykissyou

如果真如18,21楼所述,快捷方式对应的完整路径名只能在用户运行批处脚本时确定,那 ...
aloha20200628 发表于 2025-7-7 16:07


aloha,非常感谢你的帮助,我用上了36楼 77七的了,他这个能够运行。
你个结构虽然简单,但不适合,用户是不会那么复杂的操作的。有时只会点点鼠标确认一下。
 楼主| 发表于 2025-7-7 19:01:59 | 显示全部楼层
回复 36# 77七
77七 你太生猛了。
非常感谢 能很好的运行。
只是我想把创建快捷方式的改为默认执行,这个不需确认的。
只有删除文件需提示。

话说我是十年老油条啦?时间过得真快,大事未成啊,你戳着我的伤点了。
发表于 2025-7-7 19:33:58 | 显示全部楼层
回复 39# ednykissyou


   
删除第22、23、24、47、48行。
 楼主| 发表于 2025-7-7 19:49:28 | 显示全部楼层
本帖最后由 ednykissyou 于 2025-7-7 20:23 编辑

回复 40# 77七
好像不对。
是创建快捷方式时不需确认,默认执行。
只是删除时需确认。
发表于 2025-7-7 19:51:58 | 显示全部楼层
回复 38# ednykissyou

你想要的就是以下这个填表式版本?只须代码第三行中的两个变量被替换为用户的真实完整路径值,即可完事大吉了...

  1. @echo off &setlocal
  2. %~1 powershell "start -file '%~f0' -arg '::' -verb runas" &exit/b
  3. set "Da=d:\abc\AA" &set "Db=d:\abc\BB"
  4. powershell "$ws=new-object -comobject wscript.shell;('%Da%','%Db%')|%%{$sc=$ws.createshortcut($_+'.lnk');$sc.targetpath=$_;$sc.save()}"
  5. if not exist "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel" goto :next
  6. set/p "r=将删除 C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel 中的全部内容(1=是,0=否):"
  7. if %r% neq 1 goto :next
  8. del /q "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel\*.*"
  9. pushd "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel"
  10. rd /q /s "C:\Program Files\Adobe\Adobe InDesign 2024\Scripts\Scripts Panel" 2>nul
  11. popd
  12. :next
  13. for /f "delims=" %%d in ('dir /b/s/ad "C:\Program Files\Adobe\*Scripts Panel"^|findstr /irc:"Adobe InDesign 202[0-9]" ') do for %%F in ("%Da%", "%Db%") do copy /y "%%~F.lnk" "%%d"
  14. pause&exit/b
复制代码
 楼主| 发表于 2025-7-7 20:00:47 | 显示全部楼层
本帖最后由 ednykissyou 于 2025-7-7 20:20 编辑

回复 42# aloha20200628
要自动能获取aa bb所在目录, 因为不同用户可能喜欢放在不同位置。
发表于 2025-7-7 20:22:33 | 显示全部楼层
回复 41# ednykissyou


删除那些行后,代码确认的是删除目录,不是是否创建。21行只是提示,也可以删。
 楼主| 发表于 2025-7-7 20:32:25 | 显示全部楼层
本帖最后由 ednykissyou 于 2025-7-7 20:35 编辑
回复  ednykissyou


删除那些行后,代码确认的是删除目录,不是是否创建。21行只是提示,也可以删。
77七 发表于 2025-7-7 20:22


应该没删对,还在提示创建……
不是应该删18、19么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-17 02:30 , Processed in 0.010870 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表