Board logo

标题: [文件操作] 复制文件和文件夹的批处理报错此时不应有 )。请问是哪里的问题呢? [打印本页]

作者: oyr520    时间: 2023-3-17 13:39     标题: 复制文件和文件夹的批处理报错此时不应有 )。请问是哪里的问题呢?

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set source=%cd%
  4. set destination=C:\test
  5. set excludes=Folder1 Folder2 File1.txt File2.txt
  6. if not exist "%destination%" (
  7.     echo Error: test directory does not exist.
  8.     pause
  9.     exit
  10. )
  11. for /f "delims=" %%i in ('dir /b /a-d "%source%"') do (
  12.     set exclude=false
  13.     for %%j in (%excludes%) do (
  14.         if /i "%%i"=="%%j" (
  15.             set exclude=true
  16.             goto :exclude
  17.         )
  18.     )
  19.     if exist "%destination%\%%i" (
  20.         echo Skipping file: %%i
  21.     ) else (
  22.         robocopy "%source%" "%destination%" "%%i" /s /njh /njs /ndl /np /xf %excludes%
  23.     )
  24.     :exclude
  25. )
  26. for /f "delims=" %%i in ('dir /b /ad "%source%"') do (
  27.     set exclude=false
  28.     for %%j in (%excludes%) do (
  29.         if /i "%%i"=="%%j" (
  30.             set exclude=true
  31.             goto :exclude
  32.         )
  33.     )
  34.     if exist "%destination%\%%i" (
  35.         echo Skipping folder: %%i
  36.     ) else (
  37.         robocopy "%source%" "%destination%" "%%i" /s /njh /njs /ndl /np /xf %excludes%
  38.     )
  39.     :exclude
  40. )
  41. echo Done!
  42. pause
  43. exit
复制代码

作者: 77七    时间: 2023-3-17 13:59

第 20、28、36、44行,goto 跳转在for语句内,这个地方应该错了
作者: oyr520    时间: 2023-3-17 15:29

回复 2# 77七
怎么个错法?
作者: Batcher    时间: 2023-3-17 15:41

回复 1# oyr520



作者: 77七    时间: 2023-3-17 16:20

回复 3# oyr520


   

你这代码chatgpt写的?
exclude 这个既是变量又是标签,定义来定义去,不知道什么意思,我是没看明白


作者: Batcher    时间: 2023-3-17 16:44

回复 5# 77七


    看着不像。AI应该不会犯这种错误
作者: Batcher    时间: 2023-3-17 17:50

回复 1# oyr520


在你的代码基础上简化一下,使用 findstr /v 排除指定文件和文件夹:
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. set "source=%cd%"
  4. set "destination=C:\test"
  5. set "excludes=Folder1 Folder2 File1.txt File2.txt"
  6. if not exist "%destination%" (
  7.     echo Error: test directory does not exist.
  8.     pause
  9.     exit /b
  10. )
  11. for /f "delims=" %%i in ('dir /b /a-d "%source%" ^| findstr /v "%excludes%"') do (
  12.     if exist "%destination%\%%i" (
  13.         echo Skipping file: %%i
  14.     ) else (
  15.         robocopy "%source%" "%destination%" "%%i" /njh /njs /ndl /np
  16.     )
  17. )
  18. for /f "delims=" %%i in ('dir /b /ad "%source%" ^| findstr /v "%excludes%"') do (
  19.     if exist "%destination%\%%i" (
  20.         echo Skipping folder: %%i
  21.     ) else (
  22.         robocopy "%source%\%%i" "%destination%\%%i" /s /njh /njs /ndl /np
  23.     )
  24. )
  25. echo Done!
  26. pause
  27. exit /b
复制代码

作者: oyr520    时间: 2023-4-8 10:09

回复 5# 77七
是的
作者: oyr520    时间: 2023-4-8 10:09

回复 6# Batcher

是用ChatGPT生成的
作者: oyr520    时间: 2023-4-8 10:17

回复 7# Batcher


    可以,谢谢大佬




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