
【已解決】批處理robocopy代碼開始能用后面提示非內部命令robocopy命令在代碼開始能正常,后續不正常(一直到文件最后都不正常),提示非內部命令,為什么?怎么解決?
nclick="copycode($('code0'));">復制代碼
- @echo off&setlocal enabledelayedexpansion
- title 軟鏈接-程序目錄遷移
- ::==================================================== 自動提升運行權限 ====================================================::
- >nul 2>&1 REG.exe query HKUS-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

