无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 5152|回复: 15
打印 上一主题 下一主题

批处理代码优化

[复制链接]
跳转到指定楼层
1#
发表于 2022-10-22 20:11:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
有段代码,目的是把C盘的几个文件夹做成目录链接,放到其他盘,下面的代码可以实现目的,但是感觉代码太繁琐了(目前还只是弄的三个文件夹,如果多几个文件夹,那不是代码更多切重复),不知道有没优化的可能?

@echo off
set linkPath=C:\one
set targetPath=K:\one
robocopy "%linkPath%" "%targetPath%" /e /copyall /xj
rmdir "%linkPath%" /s /q
mklink /j "%linkPath%" "%targetPath%"

set linkPath=C:\two
set targetPath=K:\two
robocopy "%linkPath%" "%targetPath%" /e /copyall /xj
rmdir "%linkPath%" /s /q
mklink /j "%linkPath%" "%targetPath%"

set linkPath=C:\three
set targetPath=K:\three
robocopy "%linkPath%" "%targetPath%" /e /copyall /xj
rmdir "%linkPath%" /s /q
mklink /j "%linkPath%" "%targetPath%"
pause

2#
发表于 2022-10-22 20:26:15 | 只看该作者
本帖最后由 sunsea 于 2022-10-22 20:32 编辑
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION

  3. set linkPath=C:\one;C:\two;(此处添入更多,英文分号分割,最后一个不需有分号)
  4. set targetPath=K:\one;K:\two;(此处添入更多,英文分号分割,最后一个不需有分号)


  5. :cmdsb
  6. for /f "delims=; tokens=1,*" %%i in ("!linkPath!") do (
  7.         for /f "delims=; tokens=1,*" %%I in ("!targetPath!") do (
  8.                 rem 务必看清楚了下面的i、I、j、J!
  9.                 robocopy "%%i" "%%I" /e /copyall /xj
  10.                 rmdir "%%i" /s /q
  11.                 mklink /j "%%i" "%%I"
  12.                 set linkPath=%%j
  13.                 set targetPath=%%J
  14.         )
  15. )
  16. if not "!linkPath!"=="" goto :cmdsb

  17. rem CMD处理机制非常sb,不见换行符不认为是下一项,分号分割字符串只处理第一个,所以必须使用奇技淫巧

  18. pause
复制代码
手写的,【强烈建议先小规模测试】!


点评

很好,这个批处理,主要是测试不同系统版本的适应性上。  详情 回复 发表于 2022-10-23 15:56
测试了,好使! 但还有点困难就是因为linkPath和targetPath的多个路径分别都写在同一行,文件夹不多的时候也许好维护,但是如果有多个长路径时,就感觉不好维护了(毕竟如果有多个长路径,那就很难直观的看出哪个对  详情 回复 发表于 2022-10-22 21:04
感谢,试试先  详情 回复 发表于 2022-10-22 20:39
回复

使用道具 举报

3#
发表于 2022-10-22 20:31:11 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

4#
 楼主| 发表于 2022-10-22 20:39:10 | 只看该作者
sunsea 发表于 2022-10-22 20:26
手写的,【强烈建议先小规模测试】!

感谢,试试先
回复

使用道具 举报

5#
 楼主| 发表于 2022-10-22 20:39:30 | 只看该作者
DOSforever 发表于 2022-10-22 20:31
for %f in (on two three) do (
robocopy "C:\%f%" "K:\%f%" /e /copyall /xj
mklink /j "K:\%f%" "C:\ ...

谢谢
回复

使用道具 举报

6#
发表于 2022-10-22 20:48:02 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

7#
 楼主| 发表于 2022-10-22 20:54:03 | 只看该作者
DOSforever 发表于 2022-10-22 20:48
你原来的语句中 mklink 似乎把 target 和 link name 两个参数位置弄反了。

没反吧,要做软链接的文件夹在C盘,要把C盘的那几个文件夹转移到K盘,源语句测试是没问题的,目的就是给C盘减肥,当初很多软件都安装在C盘,又不想重装软件,这样做目录链接后,C盘就可以减很多肥了
回复

使用道具 举报

8#
 楼主| 发表于 2022-10-22 21:04:34 | 只看该作者
sunsea 发表于 2022-10-22 20:26
手写的,【强烈建议先小规模测试】!

测试了,好使!
但还有点困难就是因为linkPath和targetPath的多个路径分别都写在同一行,文件夹不多的时候也许好维护,但是如果有多个长路径时,就感觉不好维护了(毕竟如果有多个长路径,那就很难直观的看出哪个对应哪个了),现在有点想法,能不能通过读取config.txt的方式,让源文件和目标文件分别链接这样后期维护起来也非常方便,如config.txt的格式
C:\linkPath;K:\targetPath
C:\linkPath2;K:\targetPath2
C:\linkPath3;K:\targetPath3
C:\linkPath4;K:\targetPath4
这样哪个文件对应哪个就清晰明了了

点评

那更简单了:(保存批处理和config.txt的时候确认使用ANSI编码选项保存) 手机上手写的,【仍然强烈建议先小规模测试】!  详情 回复 发表于 2022-10-22 22:47
回复

使用道具 举报

9#
发表于 2022-10-22 21:07:47 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

10#
发表于 2022-10-22 21:51:57 | 只看该作者
这样的比较直观,方便增减。

@echo off
:one
set linkPath=C:\one
set targetPath=K:\one
call :Start

:two
set linkPath=C:\two
set targetPath=K:\two
call :Start

:three
set linkPath=C:\three
set targetPath=K:\three
call :Start

goto :Eof
:Start
robocopy "%linkPath%" "%targetPath%" /e /copyall /xj
rmdir "%linkPath%" /s /q
mklink /j "%linkPath%" "%targetPath%"
回复

使用道具 举报

11#
发表于 2022-10-22 22:47:02 来自手机 | 只看该作者
本帖最后由 sunsea 于 2022-10-23 08:55 编辑
jxyun99 发表于 2022-10-22 21:04
测试了,好使!
但还有点困难就是因为linkPath和targetPath的多个路径分别都写在同一行,文件夹不多的时 ...

那更简单了:(保存批处理和config.txt的时候确认使用ANSI编码选项保存)
  1. @echo off
  2. pushd "%~dp0"

  3. for /f "delims=; tokens=1,2" %%i in (config.txt) do (
  4.         robocopy "%%i" "%%j" /e /copyall /xj
  5.         rmdir "%%i" /s /q
  6.         mklink /j "%%i" "%%j"
  7. )


  8. pause
复制代码
手机上手写的,【仍然强烈建议先小规模测试】!


点评

感谢,解决问题了  详情 回复 发表于 2022-10-23 08:54
回复

使用道具 举报

12#
 楼主| 发表于 2022-10-23 08:54:53 | 只看该作者
sunsea 发表于 2022-10-22 22:47
那更简单了:(保存批处理和config.txt的时候确认使用ANSI编码选项保存)
手机上手写的,【仍然强烈建 ...

感谢,解决问题了
回复

使用道具 举报

13#
发表于 2022-10-23 11:50:51 | 只看该作者
不错
回复

使用道具 举报

14#
发表于 2022-10-23 11:57:13 | 只看该作者
回复

使用道具 举报

15#
发表于 2022-10-23 15:56:15 | 只看该作者
sunsea 发表于 2022-10-22 20:26
手写的,【强烈建议先小规模测试】!

很好,这个批处理,主要是测试不同系统版本的适应性上。
回复

使用道具 举报

16#
发表于 2022-10-27 15:47:39 | 只看该作者
厲害了,大牛們
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-26 22:01

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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