找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: aabout2008

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

[复制链接]
 楼主| 发表于 2024-4-3 16:25:13 | 显示全部楼层
回复 11# 77七
 楼主| 发表于 2024-4-3 16:27:18 | 显示全部楼层
回复 16# aabout2008   我想请问一下,您这个批处理复制文件过去了。能否在最后把那个目录打开呢。
 楼主| 发表于 2024-4-3 16:28:30 | 显示全部楼层
回复 11# 77七      效果已经实现了。我想请问一下,您这个批处理复制文件过去了。能否在最后把那个目录打开呢。
发表于 2024-4-3 16:58:47 | 显示全部楼层
回复 18# aabout2008


  
  1. start "" "%_str%"
复制代码
发表于 2024-4-3 18:00:47 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2024-4-3 20:54:53 | 显示全部楼层
回复 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
复制代码
 楼主| 发表于 2024-4-3 21:03:38 | 显示全部楼层
@77七 写出来的批处理,执行最稳定。不论是在桌面上执行,还是在DEF盘中执行。

其余的测试,总是出点小问题。
发表于 2024-4-3 21:52:32 | 显示全部楼层
回复 21# aabout2008


   写在pause 上一行就行
发表于 2024-4-3 23:41:14 | 显示全部楼层
本帖最后由 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
复制代码
 楼主| 发表于 2024-4-4 02:46:05 | 显示全部楼层
回复 23# 77七    堪称完美,完结撒花。。。
 楼主| 发表于 2024-4-4 02:52:15 | 显示全部楼层
回复 24# aloha20200628 您这个经测试,同样完美。。。

在哪里加个语句,实现:打开前面判断出来的目录,确认一下文件是否复制过去?
发表于 2024-4-4 12:18:43 | 显示全部楼层

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
复制代码
 楼主| 发表于 2024-4-5 07:17:11 | 显示全部楼层
这个代码也完美。。。
  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目录下的文件过去。代码应该如何修改。
 楼主| 发表于 2024-4-5 07:56:24 | 显示全部楼层
回复 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
复制代码
发表于 2024-4-5 11:24:22 | 显示全部楼层
回复 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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-18 04:11 , Processed in 0.021492 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表