Board logo

标题: [文件操作] 【已解决】批处理:robocopy代码开始能用,后面提示非内部命令 [打印本页]

作者: albenlee    时间: 2020-2-14 20:28     标题: 【已解决】批处理:robocopy代码开始能用,后面提示非内部命令

robocopy命令在代码开始能正常,后续不正常(一直到文件最后都不正常),提示非内部命令,为什么?怎么解决?
  1. @echo off&setlocal enabledelayedexpansion
  2. title 软链接-程序目录迁移
  3. ::==================================================== 自动提升运行权限 ====================================================::
  4. >nul 2>&1 REG.exe query "HKU\S-1-5-19" || (
  5.     ECHO SET UAC = CreateObject^("Shell.Application"^) > "%TEMP%\Getadmin.vbs"
  6.     ECHO UAC.ShellExecute "%~f0", "%1", "", "runas", 1 >> "%TEMP%\Getadmin.vbs"
  7.     "%TEMP%\Getadmin.vbs"
  8.     DEL /f /q "%TEMP%\Getadmin.vbs" 2>nul
  9.     Exit /b
  10. )
  11. ::==========================================================================================================================::
  12. rem 写入配置,分号左边为软链,右边为目标目录
  13. cd /d %temp%
  14. >mklnk.tmp echo.
  15. >>mklnk.tmp echo d:\aa;e:\aa
  16. rem 读取配置
  17. for /f "delims=; tokens=1,2" %%a in (mklnk.tmp) do (
  18.     set exlink=%%b
  19.     if exist %%b if exist %%~dpa (
  20.         if exist %%a (
  21.             robocopy "d:\aa" "e:\aa" /E /copyall /move /xn
  22.             rem ============================此处和之前使用 robocopy 正常
  23.             rem 读取软链所在目录中所有目录信息
  24.             for /f "skip=5 tokens=3,*" %%i in ('dir %%~dpa /a:d') do (
  25.                 robocopy "d:\aa" "e:\aa" /E /copyall /move /xn
  26.                 rem ====第一次循环 robocopy 正常,后续不正常(一直到文件最后都不正常),提示非内部命令,为什么?怎么解决?
  27.                 rem 以分号截取信息
  28.                 for /f "delims=: tokens=1,2" %%l in ("%%j") do (
  29.                     set name=%%l
  30.                     set path=%%m
  31.                     rem 分号右边空则非软链目录
  32.                     if "%%m" neq "" (
  33.                         if /i "!name:~0,-3!" equ "%%~nxa" (
  34.                             set lnkIsExist=1
  35.                             set exlink=!name:~-1!:!path:~0,-1!
  36.                         )
  37.                     ) else (
  38.                         set set lnkIsExist=0
  39.                     )
  40.                 )
  41.             )
  42.             
  43.             rem 是软链目录
  44.             if !lnkIsExist! equ 1 if /i "%%b" neq "!exlink!" (
  45.                 echo %%~nxa 软链已存在, 但是与目标路径不一致。
  46.                 echo 复制: %%~dpa ,进入目录手动删除或重命名 %%~nxa 软链文件后,重新运行程序
  47.             ) else (
  48.                 echo 目标路径软链已存在
  49.             )
  50.             
  51.             rem 是正常目录
  52.             if !lnkIsExist! equ 0 (
  53.                 echo 迁移目录
  54.                 echo "%%~a" "%%~b"
  55.                 rem call :mov "%%~a" "%%~b"
  56.                 robocopy "%%~a" "%%~b" /E /copyall /move /xn
  57.             )
  58.         ) else (
  59.             echo 软链不存在,可以进行软链操作
  60.         )
  61.     )
  62. )
  63. if exist mklnk.tmp del /f /s /q mklnk.tmp>nul
  64. pause
复制代码

作者: Batcher    时间: 2020-2-14 21:23

回复 1# albenlee


    代码里面的path改成mypath
作者: albenlee    时间: 2020-2-14 21:46

回复 2# Batcher


    原来系统这么多定义好的变量名。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2