robocopy命令在代码开始能正常,后续不正常(一直到文件最后都不正常),提示非内部命令,为什么?怎么解决?- @echo off&setlocal enabledelayedexpansion
- title 软链接-程序目录迁移
- ::==================================================== 自动提升运行权限 ====================================================::
- >nul 2>&1 REG.exe query "HKU\S-1-5-19" || (
- ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
- ECHO UAC.ShellExecute "%~f0", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
- "%TEMP%\Getadmin.vbs"
- DEL /f /q "%TEMP%\Getadmin.vbs" 2>nul
- Exit /b
- )
- ::==========================================================================================================================::
- rem 写入配置,分号左边为软链,右边为目标目录
- cd /d %temp%
- >mklnk.tmp echo.
- >>mklnk.tmp echo d:\aa;e:\aa
-
- rem 读取配置
- for /f "delims=; tokens=1,2" %%a in (mklnk.tmp) do (
- set exlink=%%b
- if exist %%b if exist %%~dpa (
- if exist %%a (
- robocopy "d:\aa" "e:\aa" /E /copyall /move /xn
- rem ============================此处和之前使用 robocopy 正常
- rem 读取软链所在目录中所有目录信息
- for /f "skip=5 tokens=3,*" %%i in ('dir %%~dpa /a:d') do (
- robocopy "d:\aa" "e:\aa" /E /copyall /move /xn
- rem ====第一次循环 robocopy 正常,后续不正常(一直到文件最后都不正常),提示非内部命令,为什么?怎么解决?
- rem 以分号截取信息
- for /f "delims=: tokens=1,2" %%l in ("%%j") do (
- set name=%%l
- set path=%%m
-
- rem 分号右边空则非软链目录
- if "%%m" neq "" (
- if /i "!name:~0,-3!" equ "%%~nxa" (
- set lnkIsExist=1
- set exlink=!name:~-1!:!path:~0,-1!
- )
- ) else (
- set set lnkIsExist=0
- )
- )
- )
-
- rem 是软链目录
- if !lnkIsExist! equ 1 if /i "%%b" neq "!exlink!" (
- echo %%~nxa 软链已存在, 但是与目标路径不一致。
- echo 复制: %%~dpa ,进入目录手动删除或重命名 %%~nxa 软链文件后,重新运行程序
- ) else (
- echo 目标路径软链已存在
- )
-
- rem 是正常目录
- if !lnkIsExist! equ 0 (
- echo 迁移目录
- echo "%%~a" "%%~b"
- rem call :mov "%%~a" "%%~b"
- robocopy "%%~a" "%%~b" /E /copyall /move /xn
- )
- ) else (
- echo 软链不存在,可以进行软链操作
- )
- )
- )
- if exist mklnk.tmp del /f /s /q mklnk.tmp>nul
- pause
复制代码
|