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

[系统相关] 在做一个Win7用户目录转移工具,被文本处理难住了

本帖最后由 ryanliue 于 2011-6-9 22:18 编辑

代码如下:
@echo off & setlocal EnableDelayedExpansion

:step1
cls
echo ===================================================================
echo Windows NT 6.x 用户目录转移工具 (支持Vista/2008/7/2008 R2)
echo ===================================================================
echo 功能说明:此工具将folders.txt文件指定的目录转移到目标位置并建立目录连接
echo 以下是即将转移的目录,如果不满意请在执行“确认操作”之前修改folders.txt
echo -------------------------------------------------------------------
type folders.txt
echo.
echo -------------------------------------------------------------------
echo 请输入目标位置,比如 D: 或 D:\newloc (最好是一个可写的空目录)
echo 目标位置和folders.txt文件每一行的结尾都不要以斜杠\结束
echo -------------------------------------------------------------------
set /p nl=在此输入:

:step2
echo 请输入要执行的操作:1 确认操作 2 重新开始 3 退出程序
echo -------------------------------------------------------------------
set /p yc=在此输入:
IF /i "!yc!"=="1" goto :step3
IF /i "!yc!"=="2" goto :step1
IF /i "!yc!"=="3" goto :end
Echo 您输入的!yc!不合法!请按任意键返回重新输入。
Pause>Nul&goto :step2

:step3
for /f "tokens=1,2 delims=:" %%i in (folders.txt) do (
rem robocopy "%%i:%%j" "!nl!%%j" /E /COPYALL /XJ
if %errorlevel% equ 0 echo "%%i:%%j" 到 "!nl!%%j" 目录复制成功
if %errorlevel% neq 0 echo "%%i:%%j" 到 "!nl!%%j" 目录复制失败&goto :end
上面注销的那一句的作用是将C盘中的相应目录拷贝到D盘(目录里的链接不能拷贝过来,所以要使用/XJ开关排除链接)

未完成程序段,请高手指教(创建D盘链接):
1、依次进入folders.txt文件夹中列出的各个目录,使用dir /s /on /al命令获得目录及子目录中的链接,输出格式见图1。
2、将图1中A部分和B部分相结合(不要盘符),前面加上!nl!变量(也就是目标位置),得到mklink命令的第2个参数(链接名)。
3、将图1中C部分取出(不要盘符),前面加上!nl!变量(也就是目标位置),得到mklink命令的第3个参数(目录名)。
4、如果一个链接标示为<JUNCTION>,那么它是一个目录链接,mklink命令要使用/J开关(第1个参数)。
5、如果一个链接标示为<SYMLINKD>,那么它是一个目录符号链接,mklink命令要使用/D开关(第1个参数)。
6、准备工作完成后,使用mklink做命令出相应的操作,在前面复制的新目录中创建链接(像原来的目录结构那样)。
7、我想这段程序也可以采用这种思路,依次进入每一层子目录,如果发现有链接就处理掉(<SYMLINKD>类型的链接不能直接处理,要先用rmdir命令把它删除,然后单独处理,以免造成重复调用,还好Win7系统盘只有一个这种链接)。
8、小弟才疏学浅,实在是不会呀,各位高手不要嫌弃

下面注销的这一句的作用是将C盘中的相应目录删除,给即将创建的C盘链接腾出位置。
rem rmdir "%%i:%%j" /S /Q
if %errorlevel% equ 0 echo "%%i:%%j" 目录删除成功
if %errorlevel% neq 0 echo "%%i:%%j" 目录删除失败&goto :end
下面注销的这一句的作用是将拷贝到D盘的几个主目录链接到C盘
rem mklink /J "%%i:%%j" "!nl!%%j"
if %errorlevel% equ 0 echo "%%i:%%j" 到 "!nl!%%j" 目录链接成功
if %errorlevel% neq 0 echo "%%i:%%j" 到 "!nl!%%j" 目录链接失败&goto :end
)
rmdir "C:\Documents and Settings"
mklink /J "C:\Documents and Settings" "!nl!\Users"

:end


folders.txt文件内容:
C:\ProgramData
C:\Users


图1:


C:\ProgramData中列出的链接:
驱动器 C 中的卷是 WINHD01
卷的序列号是 000A-6889

C:\ProgramData 的目录

2010/11/09  14:01    <JUNCTION>     「开始」菜单 [C:\ProgramData\Microsoft\Windows\Start Menu]
2009/07/14  13:06    <JUNCTION>     Application Data [C:\ProgramData]
2009/07/14  13:06    <JUNCTION>     Desktop [C:\Users\Public\Desktop]
2009/07/14  13:06    <JUNCTION>     Documents [C:\Users\Public\Documents]
2009/07/14  13:06    <JUNCTION>     Favorites [C:\Users\Public\Favorites]
2009/07/14  13:06    <JUNCTION>     Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu]
2009/07/14  13:06    <JUNCTION>     Templates [C:\ProgramData\Microsoft\Windows\Templates]
2010/11/09  14:01    <JUNCTION>     收藏夹 [C:\Users\Public\Favorites]
2010/11/09  14:01    <JUNCTION>     桌面 [C:\Users\Public\Desktop]
               0 个文件              0 字节

C:\ProgramData\Microsoft\Windows\Start Menu 的目录

2010/11/09  14:01    <JUNCTION>     程序 [C:\ProgramData\Microsoft\Windows\Start Menu\Programs]
               0 个文件              0 字节

     所列文件总数:
               0 个文件              0 字节
              10 个目录 50,358,603,776 可用字节


C:\Users中列出的链接:
驱动器 C 中的卷是 WINHD01
卷的序列号是 000A-6889

C:\Users 的目录

2009/07/14  13:06    <SYMLINKD>     All Users [C:\ProgramData]
2009/07/14  13:06    <JUNCTION>     Default User [C:\Users\Default]
               0 个文件              0 字节

C:\Users\Administrator 的目录

2010/11/09  14:01    <JUNCTION>     「开始」菜单 [C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu]
2010/11/09  14:01    <JUNCTION>     Application Data [C:\Users\Administrator\AppData\Roaming]
2010/11/09  14:01    <JUNCTION>     Cookies [C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies]
2010/11/09  14:01    <JUNCTION>     Local Settings [C:\Users\Administrator\AppData\Local]
2010/11/09  14:01    <JUNCTION>     My Documents [C:\Users\Administrator\Documents]
2010/11/09  14:01    <JUNCTION>     NetHood [C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Network Shortcuts]
2010/11/09  14:01    <JUNCTION>     PrintHood [C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Printer Shortcuts]
2010/11/09  14:01    <JUNCTION>     Recent [C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Recent]
2010/11/09  14:01    <JUNCTION>     SendTo [C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\SendTo]
2010/11/09  14:01    <JUNCTION>     Templates [C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Templates]
               0 个文件              0 字节

C:\Users\Administrator\AppData\Local 的目录

2010/11/09  14:01    <JUNCTION>     Application Data [C:\Users\Administrator\AppData\Local]
2010/11/09  14:01    <JUNCTION>     History [C:\Users\Administrator\AppData\Local\Microsoft\Windows\History]
2010/11/09  14:01    <JUNCTION>     Temporary Internet Files [C:\Users\Administrator\AppData\Local\Microsoft\Windows\Temporary Internet Files]
               0 个文件              0 字节

C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu 的目录

2010/11/09  14:01    <JUNCTION>     程序 [C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs]
               0 个文件              0 字节

C:\Users\Administrator\Documents 的目录

2010/11/09  14:01    <JUNCTION>     My Music [C:\Users\Administrator\Music]
2010/11/09  14:01    <JUNCTION>     My Pictures [C:\Users\Administrator\Pictures]
2010/11/09  14:01    <JUNCTION>     My Videos [C:\Users\Administrator\Videos]
               0 个文件              0 字节

C:\Users\All Users 的目录

2010/11/09  14:01    <JUNCTION>     「开始」菜单 [C:\ProgramData\Microsoft\Windows\Start Menu]
2009/07/14  13:06    <JUNCTION>     Application Data [C:\ProgramData]
2009/07/14  13:06    <JUNCTION>     Desktop [C:\Users\Public\Desktop]
2009/07/14  13:06    <JUNCTION>     Documents [C:\Users\Public\Documents]
2009/07/14  13:06    <JUNCTION>     Favorites [C:\Users\Public\Favorites]
2009/07/14  13:06    <JUNCTION>     Start Menu [C:\ProgramData\Microsoft\Windows\Start Menu]
2009/07/14  13:06    <JUNCTION>     Templates [C:\ProgramData\Microsoft\Windows\Templates]
2010/11/09  14:01    <JUNCTION>     收藏夹 [C:\Users\Public\Favorites]
2010/11/09  14:01    <JUNCTION>     桌面 [C:\Users\Public\Desktop]
               0 个文件              0 字节

C:\Users\All Users\Microsoft\Windows\Start Menu 的目录

2010/11/09  14:01    <JUNCTION>     程序 [C:\ProgramData\Microsoft\Windows\Start Menu\Programs]
               0 个文件              0 字节

C:\Users\Default 的目录

2010/11/09  14:01    <JUNCTION>     「开始」菜单 [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu]
2009/07/14  13:06    <JUNCTION>     Application Data [C:\Users\Default\AppData\Roaming]
2009/07/14  13:06    <JUNCTION>     Cookies [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Cookies]
2009/07/14  13:06    <JUNCTION>     Local Settings [C:\Users\Default\AppData\Local]
2009/07/14  13:06    <JUNCTION>     My Documents [C:\Users\Default\Documents]
2009/07/14  13:06    <JUNCTION>     NetHood [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Network Shortcuts]
2009/07/14  13:06    <JUNCTION>     PrintHood [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Printer Shortcuts]
2009/07/14  13:06    <JUNCTION>     Recent [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Recent]
2009/07/14  13:06    <JUNCTION>     SendTo [C:\Users\Default\AppData\Roaming\Microsoft\Windows\SendTo]
2009/07/14  13:06    <JUNCTION>     Start Menu [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu]
2009/07/14  13:06    <JUNCTION>     Templates [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Templates]
               0 个文件              0 字节

C:\Users\Default\AppData\Local 的目录

2009/07/14  13:06    <JUNCTION>     Application Data [C:\Users\Default\AppData\Local]
2009/07/14  13:06    <JUNCTION>     History [C:\Users\Default\AppData\Local\Microsoft\Windows\History]
2009/07/14  13:06    <JUNCTION>     Temporary Internet Files [C:\Users\Default\AppData\Local\Microsoft\Windows\Temporary Internet Files]
               0 个文件              0 字节

C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu 的目录

2010/11/09  14:01    <JUNCTION>     程序 [C:\Users\Default\AppData\Roaming\Microsoft\Windows\Start Menu\Programs]
               0 个文件              0 字节

C:\Users\Default\Documents 的目录

2009/07/14  13:06    <JUNCTION>     My Music [C:\Users\Default\Music]
2009/07/14  13:06    <JUNCTION>     My Pictures [C:\Users\Default\Pictures]
2009/07/14  13:06    <JUNCTION>     My Videos [C:\Users\Default\Videos]
               0 个文件              0 字节

C:\Users\Public\Documents 的目录

2009/07/14  13:06    <JUNCTION>     My Music [C:\Users\Public\Music]
2009/07/14  13:06    <JUNCTION>     My Pictures [C:\Users\Public\Pictures]
2009/07/14  13:06    <JUNCTION>     My Videos [C:\Users\Public\Videos]
               0 个文件              0 字节

C:\Users\ryanliue 的目录

2010/11/09  14:30    <JUNCTION>     「开始」菜单 [C:\Users\ryanliue\AppData\Roaming\Microsoft\Windows\Start Menu]
2010/11/09  14:30    <JUNCTION>     Application Data [C:\Users\ryanliue\AppData\Roaming]
2010/11/09  14:30    <JUNCTION>     Cookies [C:\Users\ryanliue\AppData\Roaming\Microsoft\Windows\Cookies]
2010/11/09  14:30    <JUNCTION>     Local Settings [C:\Users\ryanliue\AppData\Local]
2010/11/09  14:30    <JUNCTION>     My Documents [C:\Users\ryanliue\Documents]
2010/11/09  14:30    <JUNCTION>     NetHood [C:\Users\ryanliue\AppData\Roaming\Microsoft\Windows\Network Shortcuts]
2010/11/09  14:30    <JUNCTION>     PrintHood [C:\Users\ryanliue\AppData\Roaming\Microsoft\Windows\Printer Shortcuts]
2010/11/09  14:30    <JUNCTION>     Recent [C:\Users\ryanliue\AppData\Roaming\Microsoft\Windows\Recent]
2010/11/09  14:30    <JUNCTION>     SendTo [C:\Users\ryanliue\AppData\Roaming\Microsoft\Windows\SendTo]
2010/11/09  14:30    <JUNCTION>     Templates [C:\Users\ryanliue\AppData\Roaming\Microsoft\Windows\Templates]
               0 个文件              0 字节

C:\Users\ryanliue\AppData\Local 的目录

2010/11/09  14:30    <JUNCTION>     Application Data [C:\Users\ryanliue\AppData\Local]
2010/11/09  14:30    <JUNCTION>     History [C:\Users\ryanliue\AppData\Local\Microsoft\Windows\History]
2010/11/09  14:30    <JUNCTION>     Temporary Internet Files [C:\Users\ryanliue\AppData\Local\Microsoft\Windows\Temporary Internet Files]
               0 个文件              0 字节

C:\Users\ryanliue\AppData\Roaming\Microsoft\Windows\Start Menu 的目录

2010/11/09  14:30    <JUNCTION>     程序 [C:\Users\ryanliue\AppData\Roaming\Microsoft\Windows\Start Menu\Programs]
               0 个文件              0 字节

C:\Users\ryanliue\Documents 的目录

2010/11/09  14:30    <JUNCTION>     My Music [C:\Users\ryanliue\Music]
2010/11/09  14:30    <JUNCTION>     My Pictures [C:\Users\ryanliue\Pictures]
2010/11/09  14:30    <JUNCTION>     My Videos [C:\Users\ryanliue\Videos]
               0 个文件              0 字节

     所列文件总数:
               0 个文件              0 字节
              67 个目录 50,358,599,680 可用字节

我想知道,楼主若你的c盘下有一万个目录,你是不是打算在这里帖一万行
先认真看看版规,仔细学学怎样发帖求助吧
技术问题请到论坛发帖求助!

TOP

这些目录  可以用注册表改  

MKLINK改系统目录比较好
测试环境:WINDOWS 8 64Bit
如系统环境不同,请自行修改 :)

TOP

返回列表