Board logo

标题: [文件操作] 【已解决】批处理如何循环判断打开正确的路径并复制当前文件夹到指定路径下? [打印本页]

作者: aabout2008    时间: 2024-4-2 10:14     标题: 【已解决】批处理如何循环判断打开正确的路径并复制当前文件夹到指定路径下?

本帖最后由 aabout2008 于 2024-4-5 07:12 编辑
  1. start "" "C:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  2. start "" "D:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  3. start "" "E:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  4. start "" "F:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  5. start "" "G:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  6. start "" "C:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  7. start "" "D:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  8. start "" "E:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  9. start "" "F:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  10. start "" "G:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""  
  11. rem  打开Coredraw2020插件目录
  12. rem  将批处理所在文件夹,复制到Addons 目录下
复制代码

作者: aabout2008    时间: 2024-4-2 10:18

想要实现的效果就是,打开软件正确的路径后,复制批处理所在文件夹到打开的路径下后关闭批处理。我不太懂这些,只能把所有可能的路径都考虑进去,一点开报错好多,然后手动复制。
  1. start "" "C:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  2. start "" "D:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  3. start "" "E:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  4. start "" "F:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  5. start "" "G:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  6. start "" "C:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  7. start "" "D:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  8. start "" "E:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  9. start "" "F:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""
  10. start "" "G:\Program Files \CorelDRAW Graphics Suite 2020\Programs64\Addons" ""  
复制代码

作者: aabout2008    时间: 2024-4-2 10:26

本帖最后由 aabout2008 于 2024-4-2 10:28 编辑

目录最好是用相对目录(也不知道是不是这样的说法。),就是不用搜索addons字段打开这个文件夹,才把文件夹复制过去。

就是把上面的路径都循环一遍后,打开正确的路径后把批处理所在文件夹复制过去。
作者: ShowCode    时间: 2024-4-2 10:38

回复 1# aabout2008
  1. @echo off
  2. for %%i in (C D E F G) do (
  3.     if not exist "%%i:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons" (
  4.         xcopy /e /y "%~dp0" "%%i:\Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons\"
  5.     ) else (
  6.         echo Not found "%%i:"
  7.     )
  8. )
  9. pause
复制代码

作者: 77七    时间: 2024-4-2 11:54

本帖最后由 77七 于 2024-4-2 11:56 编辑
  1. %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit
  2. @echo off
  3. cd /d "%~dp0"
  4. set str=CorelDRAW Graphics Suite 2020\Programs64\Addons
  5. for %%a in (c d e f g) do (
  6. if exist "%%a:\Program Files (x86)\%str%" (
  7. robocopy . "%%a:\Program Files (x86)\%str%" /e /xf "%~f0"
  8. ) else if exist "%%a:\Program Files \%str%" (
  9. robocopy . "%%a:\Program Files \%str%" /e /xf "%~f0"
  10. )
  11. )
  12. pause
复制代码

作者: aabout2008    时间: 2024-4-2 14:07

本帖最后由 aabout2008 于 2024-4-2 14:12 编辑

回复 5# 77七    
测试正常。您这个批处理达到效果是,复制bat所在目录下文件到指定目录。。

如果能获取到bat所在文件夹的文件名后,以文件夹的形式复制到当前打开的目录下就更好了。
感谢,基本效果达到了,大不了去目录下新建一个文件夹,再把文件剪切进去。
作者: aabout2008    时间: 2024-4-2 14:21

回复 4# ShowCode 您这个提示:无效路径。
  1. 无效路径
  2. 复制了0个文件
  3. Not , found "D:"
  4. 无效驱动器规格
  5. 复制了0个义件
  6. 无效驱动器规格
  7. 复制了0个文件
  8. 无救驱动器规格
  9. 复制了0个文件
  10. 请按任意键继续...
复制代码

作者: 77七    时间: 2024-4-2 14:24

回复 6# aabout2008


  
  1. %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit
  2. @echo off
  3. cd /d "%~dp0"
  4. set str=CorelDRAW Graphics Suite 2020\Programs64\Addons
  5. for %%a in (c d e f g) do (
  6. if exist "%%a:\Program Files (x86)\%str%" (
  7. set _str=%%a:\Program Files (x86)\%str%
  8. ) else if exist "%%a:\Program Files \%str%" (
  9. set _str=%%a:\Program Files \%str%
  10. )
  11. )
  12. for %%a in (.) do (
  13. robocopy . "%_str%\%%~nxa" /e /xf "%~f0"
  14. )
  15. pause
复制代码

作者: aabout2008    时间: 2024-4-2 15:05

本帖最后由 aabout2008 于 2024-4-2 16:22 编辑

回复 8# 77七 加了这个语句,不执行呃。
  1.     for %%a in (.) do (
  2. robocopy . "%_str%\%%~nxa" /e /xf "%~f0"
  3. )
复制代码
没修改前是可以用的,加了后边的语句没反应了。

可不可以在运行批处理的时候,先获取批处理所在的文件夹名。
循环路径打开对的路径后,先新建一个刚刚获取文件夹名的文件夹。再把文件复制进去。
作者: ShowCode    时间: 2024-4-2 15:11

回复 7# aabout2008


    把4楼代码第3行的not删掉再试试
作者: 77七    时间: 2024-4-2 15:19

本帖最后由 77七 于 2024-4-2 15:20 编辑

回复 9# aabout2008


   改一下第7行,这个if 和 ()总是容易出错
  1. set "_str=%%a:\Program Files (x86)\%str%"
复制代码


作者: aabout2008    时间: 2024-4-2 16:25

回复 11# 77七    万分感谢。。。这下完美解决了。
作者: aabout2008    时间: 2024-4-2 16:54

回复 10# ShowCode    

删掉not后就可以了。达到的效果是:复制bat所在目录下其它文件到打开的目录下。。

如果能获取到bat所在文件夹的文件名后,以文件夹的形式复制到当前打开的目录下就更好了。 您这个代码要少一些,后面要怎么加才能变成文件夹复制过去。
作者: aloha20200628    时间: 2024-4-2 17:50

本帖最后由 aloha20200628 于 2024-4-2 17:53 编辑

回复 13# aabout2008
把当前目录(批处理脚本所在目录)整个复制过去...
  1. @echo off
  2. set "p86=Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  3. set "p64=Program Files\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  4. set "_d=%~p0"
  5. set "_d=%_d:~,-1%"
  6. (for %%d in (c: d: e: f: g:) do (
  7. for %%p in ("%p86%" "%p64%") do if /i exist "%%d\%%~p" (
  8. md "%%d\%%~p%_d%"
  9. xcopy /s/q/y "%_d%" "%%d\%%~p%_d%"
  10. )
  11. )) 2>nul
  12. exit/b
复制代码

作者: aabout2008    时间: 2024-4-3 16:19

回复 14# aloha20200628    

您这个测试后,如果文件夹是在桌面上,则没有反应。

在硬盘中,假如路径是1\2\3\a ,a文件夹中有这个批处理。
运行后会把1\2\3\a文件夹一起复制过去。但我需要复制过去的只是a文件夹。
作者: aabout2008    时间: 2024-4-3 16:25

回复 11# 77七
作者: aabout2008    时间: 2024-4-3 16:27

回复 16# aabout2008   我想请问一下,您这个批处理复制文件过去了。能否在最后把那个目录打开呢。
作者: aabout2008    时间: 2024-4-3 16:28

回复 11# 77七      效果已经实现了。我想请问一下,您这个批处理复制文件过去了。能否在最后把那个目录打开呢。
作者: 77七    时间: 2024-4-3 16:58

回复 18# aabout2008


  
  1. start "" "%_str%"
复制代码

作者: aloha20200628    时间: 2024-4-3 18:00

本帖最后由 aloha20200628 于 2024-4-3 19:20 编辑

回复 15# aabout2008

再加一步目录提纯...订正代码如下
  1. @echo off
  2. set "p86=Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  3. set "p64=Program Files\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  4. set "_d=%~p0"
  5. for %%p in ("%_d:~,-1%") do set "_d=%%~nxp"
  6. (for %%d in (c: d: e: f: g:) do (
  7. for %%p in ("%p86%" "%p64%") do if /i exist "%%d\%%~p" (
  8. md "%%d\%%~p%_d%"
  9. xcopy /s/q/y "%_d%" "%%d\%%~p%_d%"
  10. )
  11. )) 2>nul
  12. exit/b
复制代码

作者: aabout2008    时间: 2024-4-3 20:54

回复 19# 77七
  1. start "" "%_str%"
复制代码
加入这个语句,打开的是当前批处理的目录。

我想打开的是前面判断出来的目录,打开后可以确认下文件有没有复制过去。
应该添加到哪里?实在是有点不好意思,太麻烦您了。

原来的批处的代码是这样的:
  1. %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit
  2. @echo off
  3. cd /d "%~dp0"
  4. set str=CorelDRAW Graphics Suite 2020\Programs64\Addons
  5. for %%a in (c d e f g) do (
  6. if exist "%%a:\Program Files (x86)\%str%" (
  7. set "_str=%%a:\Program Files (x86)\%str%"
  8. ) else if exist "%%a:\Program Files \%str%" (
  9. set _str=%%a:\Program Files \%str%
  10. )
  11. )
  12. for %%a in (.) do (
  13. robocopy . "%_str%\%%~nxa" /e /xf "%~f0"
  14. )
  15. pause
复制代码

作者: aabout2008    时间: 2024-4-3 21:03

@77七 写出来的批处理,执行最稳定。不论是在桌面上执行,还是在DEF盘中执行。

其余的测试,总是出点小问题。
作者: 77七    时间: 2024-4-3 21:52

回复 21# aabout2008


   写在pause 上一行就行
作者: aloha20200628    时间: 2024-4-3 23:41

本帖最后由 aloha20200628 于 2024-4-4 17:58 编辑

回复 15# aabout2008

根据楼主的最新回复,订正代码如下...应该能给一个圆满的解答了
  1. @echo off
  2. set "p86=Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  3. set "p64=Program Files\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  4. set "_d=%~p0"
  5. for %%p in ("%_d:~,-1%") do set "_d=%%~nxp"
  6. (for %%d in (c: d: e: f: g:) do (
  7. for %%p in ("%p86%" "%p64%") do if /i exist "%%d\%%~p" (
  8. xcopy /s/f/i/y "." "%%d\%%~p\%_d%\"
  9. )
  10. )) 2>nul
  11. pause&exit/b
复制代码

作者: aabout2008    时间: 2024-4-4 02:46

回复 23# 77七    堪称完美,完结撒花。。。
作者: aabout2008    时间: 2024-4-4 02:52

回复 24# aloha20200628 您这个经测试,同样完美。。。

在哪里加个语句,实现:打开前面判断出来的目录,确认一下文件是否复制过去?
作者: aloha20200628    时间: 2024-4-4 12:18


24楼代码可以实时屏显xcopy过程简报,如楼主还觉不过瘾,再加一步,改用以下代码可以逐个开启每个目标盘的p86和p64新建子目录,跟跑其复制过程...
  1. @echo off
  2. set "p86=Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  3. set "p64=Program Files\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  4. set "_d=%~p0"
  5. for %%p in ("%_d:~,-1%") do set "_d=%%~nxp"
  6. (for %%d in (c: d: e: f: g:) do (
  7. for %%p in ("%p86%" "%p64%") do if /i exist "%%d\%%~p" (
  8. md "%%d\%%~p\%_d%"&start "" "%%d\%%~p\%_d%"
  9. xcopy /s/f/y "." "%%d\%%~p\%_d%\"
  10. )
  11. )) 2>nul
  12. pause&exit/b
复制代码

作者: aabout2008    时间: 2024-4-5 07:17

这个代码也完美。。。
  1. @echo off
  2. set "p86=Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  3. set "p64=Program Files\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  4. set "_d=%~p0"
  5. for %%p in ("%_d:~,-1%") do set "_d=%%~nxp"
  6. (for %%d in (c: d: e: f: g:) do (
  7. for %%p in ("%p86%" "%p64%") do if /i exist "%%d\%%~p" (
  8. md "%%d\%%~p\%_d%"&start "" "%%d\%%~p\%_d%"
  9. xcopy /s/f/y "." "%%d\%%~p\%_d%\"
  10. )
  11. )) 2>nul
  12. pause&exit/b
复制代码
我想请问一下,如果不是复制文件夹过去,只是复制bat目录下的文件过去。代码应该如何修改。
作者: aabout2008    时间: 2024-4-5 07:56

回复 27# aloha20200628
对了,您这个代码把bat文件一起复制过去了,要排除bat文件。
  1. @echo off
  2. set "p86=Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  3. set "p64=Program Files\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  4. set "_d=%~p0"
  5. for %%p in ("%_d:~,-1%") do set "_d=%%~nxp"
  6. (for %%d in (c: d: e: f: g:) do (
  7. for %%p in ("%p86%" "%p64%") do if /i exist "%%d\%%~p" (
  8. md "%%d\%%~p\%_d%"&start "" "%%d\%%~p\%_d%"
  9. xcopy /s/f/y "." "%%d\%%~p\%_d%\"
  10. )
  11. )) 2>nul
  12. pause&exit/b
复制代码

作者: aloha20200628    时间: 2024-4-5 11:24

回复 28# aabout2008

又跟楼主回到了原点...用以下代码吧,顺便再把复制过去的批处理文件铲了
  1. @echo off
  2. set "p86=Program Files (x86)\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  3. set "p64=Program Files\CorelDRAW Graphics Suite 2020\Programs64\Addons"
  4. (for %%d in (c: d: e: f: g:) do (
  5. for %%p in ("%p86%" "%p64%") do if /i exist "%%d\%%~p" (
  6. start "" "%%d\%%~p"
  7. xcopy /s/f/y "." "%%d\%%~p\"
  8. del /q "%%d\%%~p\%~nx0"
  9. )
  10. )) 2>nul
  11. pause&exit/b
复制代码





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