无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3828|回复: 14

[已解决] 如何编写批处理,检测是否存在符号链接?谢谢。

[复制链接]
发表于 2018-3-14 19:42:05 | 显示全部楼层 |阅读模式
本帖最后由 houxiren 于 2018-3-25 16:20 编辑

请问如何编写批处理,检测是否存在这两个符号链接,

不存在的话,就用下列命令创建符号链接。
Mklink /D "%AppData%\Yu Writer" "%~dp0\Roaming\Yu Writer"
Mklink /D "%LOCALAPPDATA%\Yu Writer" "%~dp0\Local\Yu Writer"
创建后,运行批处理同目录下的Yu Writer.exe

存在的话,直接运行批处理同目录下的Yu Writer.exe

谢谢nttwqz前辈帮助解决。注意如果%AppData%和%LOCALAPPDATA%目录下存在正常的Yu Writer目录,就会新建失败,需要修改以下代码。

@echo off
dir /al "%AppData%\Yu Writer" >nul 2>&1 || Mklink /D "%AppData%\Yu Writer" "%~dp0\Roaming\Yu Writer" 2>nul
dir /al "%LOCALAPPDATA%\Yu Writer" >nul 2>&1 || Mklink /D "%LOCALAPPDATA%\Yu Writer" "%~dp0\Local\Yu Writer" 2>nul
start "%~dp0\Yu Writer.exe"

点评

批处理太灵活,还是ahk方便,抄抄改改,马上出厂。  发表于 2018-3-24 09:23
发表于 2018-3-15 20:09:41 | 显示全部楼层
dir /al 可以查找符号链接

点评

nttwqz前辈好,以前就曾得到您的帮助。再次感谢。 可以帮我编一下呢?谢谢您。 (我自己试一下,运行 dir /al 得出 Yu Writer 能够查找出这个符号链接)  详情 回复 发表于 2018-3-22 22:02
回复

使用道具 举报

发表于 2018-3-16 09:10:28 | 显示全部楼层
本帖最后由 9zhmke 于 2018-3-16 09:15 编辑

可以参考下我写的这一段旺旺绿化批处理,目的是把旺旺的用户目录指向D盘我的文档下面,以保存数据,避免每次重装后的麻烦,随手写的并没有优化,你可以再改进下:


  1. rem 把用户目录指向“我的文档”下去
  2. set Personal=
  3. for /f "tokens=1* delims= " %%i in ('mklink /?') do set Personal=%%i
  4. set "Personal2=%Personal:相对=%"
  5. echo mklink输出字符串对比:%Personal%和%Personal2%
  6. if  "%Personal%" == "%Personal2%"  goto END
  7. reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders">%Temp%\bdyTemp.txt
  8. for /f "tokens=2* delims= " %%i in ('type %Temp%\bdyTemp.txt^|findstr /I "Personal"') do ( set "Personal=%%~j" )
  9. if "%Personal%"=="" for /f "tokens=2 delims=Z" %%i in ('type %Temp%\bdyTemp.txt^|findstr /I "Personal"') do ( set "Personal=%%~i" )
  10. for /f "tokens=1* delims= " %%i in ('echo %Personal%') do set Personal=%%i
  11. echo 我的文档的路径是:"%Personal%"
  12. del %Temp%\bdyTemp.txt

  13. rd /s /q .\profiles >nul 2>nul
  14. if not exist "%Personal%\系统设置\." md "%Personal%\系统设置"
  15. if not exist "%Personal%\系统设置\阿里旺旺profiles\." md "%Personal%\系统设置\阿里旺旺profiles"
  16. mklink /j ".\profiles" "%Personal%\系统设置\阿里旺旺profiles"

  17. start /wait /B "" "%~dp0%ali%\wwbizsrv.exe" /install
  18. start /wait /B "" "%~dp0%ali%\wwbizsrv.exe" /install /path:"%~dp0%ali%"
  19. ECHO 关联完成,任意键退出!

  20. :END
复制代码


同理的百度云用户数据:

  1. rem 把用户目录指向“我的文档”下去
  2. set Personal=
  3. for /f "tokens=1* delims= " %%i in ('mklink /?') do set Personal=%%i
  4. set "Personal2=%Personal:相对=%"
  5. echo mklink输出字符串对比:%Personal%和%Personal2%
  6. if  "%Personal%" == "%Personal2%"  goto END

  7. reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders">%Temp%\bdyTemp.txt
  8. for /f "tokens=2* delims= " %%i in ('type %Temp%\bdyTemp.txt^|findstr /I "Personal"') do ( set "Personal=%%~j" )
  9. if "%Personal%"=="" for /f "tokens=2 delims=Z" %%i in ('type %Temp%\bdyTemp.txt^|findstr /I "Personal"') do ( set "Personal=%%~i" )
  10. for /f "tokens=1* delims= " %%i in ('echo %Personal%') do set Personal=%%i
  11. echo 我的文档的路径是:"%Personal%"
  12. del %Temp%\bdyTemp.txt

  13. rd /s /q .\profiles >nul 2>nul
  14. if not exist "%Personal%\系统设置\." md "%Personal%\系统设置"
  15. if not exist "%Personal%\系统设置\百度云Profile\." md "%Personal%\系统设置\百度云Profile"
  16. mklink /j ".\users" "%Personal%\系统设置\百度云Profile"
  17. md users
  18. md users\5315185b7ec2010b7a5487d124cad4db
  19. copy PersonalSetting.xml users\5315185b7ec2010b7a5487d124cad4db
  20. ECHO    安装完成..
  21. :End
复制代码


点评

谢谢您,我自己动手能力差,学了您的批处理,还是不会。  详情 回复 发表于 2018-3-22 22:04
回复

使用道具 举报

 楼主| 发表于 2018-3-22 22:02:51 | 显示全部楼层
nttwqz 发表于 2018-3-15 20:09
dir /al 可以查找符号链接

nttwqz前辈好,以前就曾得到您的帮助。再次感谢。
可以帮我编一下呢?谢谢您。
(我自己试一下,运行 dir /al 得出<SYMLIKED> Yu Writer  能够查找出这个符号链接)
回复

使用道具 举报

 楼主| 发表于 2018-3-22 22:04:04 | 显示全部楼层
9zhmke 发表于 2018-3-16 09:10
可以参考下我写的这一段旺旺绿化批处理,目的是把旺旺的用户目录指向D盘我的文档下面,以保存数据,避免每 ...

谢谢您,我自己动手能力差,学了您的批处理,还是不会。
回复

使用道具 举报

发表于 2018-3-22 22:23:09 | 显示全部楼层
其实mklink在目标存在时会提示错误,所有你根本就不用查找,直接创建即可。

  1. Mklink /D "%AppData%\Yu Writer" "%~dp0\Roaming\Yu Writer" 2>nul
  2. Mklink /D "%LOCALAPPDATA%\Yu Writer" "%~dp0\Local\Yu Writer" 2>nul
  3. "%~dp0\Yu Writer.exe"
复制代码
回复

使用道具 举报

发表于 2018-3-22 22:27:19 | 显示全部楼层
如果你非要查找的话。


  1. @echo off
  2. dir /al "%AppData%\Yu Writer" >nul 2>&1 || Mklink /D "%AppData%\Yu Writer" "%~dp0\Roaming\Yu Writer" 2>nul
  3. dir /al "%LOCALAPPDATA%\Yu Writer" >nul 2>&1 || Mklink /D "%LOCALAPPDATA%\Yu Writer" "%~dp0\Local\Yu Writer" 2>nul
  4. start "%~dp0\Yu Writer.exe"
复制代码

点评

前辈 dir /al "%AppData%\Yu Writer" >nul 2>&1 || Mklink /D "%AppData%\Yu Writer" "%~dp0\Roaming\Yu Writer" 2>nul 这句的意思是不是这样? 一,用||,把整句分成两条命令,如果第一条命令失败后才执行第二条  详情 回复 发表于 2018-3-24 22:00
谢谢前辈。很好用。  详情 回复 发表于 2018-3-23 23:54
回复

使用道具 举报

 楼主| 发表于 2018-3-23 23:54:27 | 显示全部楼层
nttwqz 发表于 2018-3-22 22:27
如果你非要查找的话。

谢谢前辈。很好用。
回复

使用道具 举报

 楼主| 发表于 2018-3-24 22:00:16 | 显示全部楼层
本帖最后由 houxiren 于 2018-3-25 15:54 编辑
nttwqz 发表于 2018-3-22 22:27
如果你非要查找的话。


前辈
dir /al "%AppData%\Yu Writer" >nul 2>&1 || Mklink /D "%AppData%\Yu Writer" "%~dp0\Roaming\Yu Writer" 2>nul
这句的意思是不是这样?
一,用||,把整句分成两条命令,如果第一条命令失败后才执行第二条命令
dir /al "%AppData%\Yu Writer" >nul 2>&1
Mklink /D "%AppData%\Yu Writer" "%~dp0\Roaming\Yu Writer" 2>nul
二, >nul 不显示成功信息,2>nul 不显示错误信息
三,2>&1  这句是什么意思?

点评

嗯,一和二都是对的。 1>nul 2>nul 1>nul 2>&1 1>nul 2&1是2的输出和1相同。看不懂没有关系,可以记住常用的用法即可,反正不用了也会忘记的。 http://bbs.bathome.net/thread-2579-1-1.html[/ulr]  详情 回复 发表于 2018-3-25 00:20
回复

使用道具 举报

发表于 2018-3-25 00:20:33 | 显示全部楼层
houxiren 发表于 2018-3-24 22:00
前辈
dir /al "%AppData%\Yu Writer" >nul 2>&1 || Mklink /D "%AppData%\Yu Writer" "%~dp0\Roaming\Yu ...


嗯,一和二都是对的。

1>nul 2>nul
1>nul 2>&1
1>nul 2<&1
结果都是一样的,怎么写都行。

想弄清楚什么意思,比较复杂,这涉及到批处理的高级教程——句柄备份,你可以自己搜索一下,或者直接看下面的教程,虽然我看过至少十次以上,也理解透了不止一次,不过,因用的极少,都忘记了。依稀记得,2>&1是2的输出和1相同。看不懂没有关系,可以记住常用的用法即可,反正不用了也会忘记的。

http://bbs.bathome.net/thread-2579-1-1.html

点评

谢谢前辈回复。 请教另一个问题,我有些设置用在同一个批处理里,最后一项却不生效。如果最后一项独立成一个批处理,又会生效,不知道是什么原因。您帮忙看一下。最后一项指: rem 9,设置Chrome为默认浏览器  详情 回复 发表于 2018-3-25 16:16
回复

使用道具 举报

 楼主| 发表于 2018-3-25 16:16:22 | 显示全部楼层
本帖最后由 houxiren 于 2018-3-25 16:17 编辑
nttwqz 发表于 2018-3-25 00:20
嗯,一和二都是对的。

1>nul 2>nul


谢谢前辈回复。

请教另一个问题,我有些设置用在同一个批处理里,最后一项却不生效。如果最后一项独立成一个批处理,又会生效,不知道是什么原因。您帮忙看一下。最后一项指:
附件一个是总的,另一个是把最后一项独立成一个批处理。附件下载后去掉 .zip 变成 .cmd

rem 9,设置Chrome为默认浏览器
reg add "HKCR\http\DefaultIcon" /f /ve /t REG_SZ /d "\"%~dp0NET\ChromeP\Chrome.exe\"",0
reg add "HKCR\http\shell\open\command" /f /ve /t REG_SZ /d "\"%~dp0NET\ChromeP\Chrome.exe\" -- \"%%1\""
reg add "HKCR\http\shell\open\ddeexec\Application" /f /ve /t REG_SZ /d "Google Chrome"
reg add "HKCR\https\DefaultIcon" /f /ve /t REG_SZ /d "\"%~dp0NET\ChromeP\Chrome.exe\"",0
reg add "HKCR\https\shell\open\command" /f /ve /t REG_SZ /d "\"%~dp0NET\ChromeP\Chrome.exe\" -- \"%%1\""
reg add "HKCR\https\shell\open\ddeexec\Application" /f /ve /t REG_SZ /d "Google Chrome"
reg add "HKCR\mhtmlfile\DefaultIcon" /f /ve /t REG_SZ /d "\"%~dp0NET\ChromeP\Chrome.exe\"",0
reg add "HKCR\mhtmlfile\shell\open\command" /f /ve /t REG_SZ /d "\"%~dp0NET\ChromeP\Chrome.exe\" -- \"%%1\""
reg add "HKCR\mhtmlfile\shell\open\ddeexec\Application" /f /ve /t REG_SZ /d "Google Chrome"
reg add "HKCR\ftp\DefaultIcon" /f /ve /t REG_SZ /d "\"%~dp0NET\ChromeP\Chrome.exe\"",0
reg add "HKCR\ftp\shell\open\command" /f /ve /t REG_SZ /d "\"%~dp0NET\ChromeP\Chrome.exe\" -- \"%%1\""
reg add "HKCR\ftp\shell\open\ddeexec\Application" /f /ve /t REG_SZ /d "Google Chrome"

我的设置 - 1.cmd.zip

1.15 KB, 下载次数: 0, 下载积分: 无忧币 -2

我的设置.cmd.zip

7.17 KB, 下载次数: 0, 下载积分: 无忧币 -2

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-4-17 02:43

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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