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

[文件操作] 批处理复制文件 重名 问题

[复制链接]
发表于 2021-12-14 10:29:47 | 显示全部楼层 |阅读模式
  1. @echo off&setlocal enabledelayedexpansion

  2. for /f "delims=:" %%i in ('dir /b /ad')  do (
  3.    
  4.     echo "%%i"
  5.     pushd "%%i"
  6.     for /f "delims=:" %%a in ('dir /b /a-d *.jpg') do (
  7.          
  8.          if not exist "%%~fi\%%a" (
  9.                 echo "%%~fa"
  10.                                 set name="%%~fa"
  11.                 copy /y  !name! "%%i")
  12.          if  exist "%%~fi\%%a" (
  13.                 set name="%%~fa"
  14.                 echo  !name!>>D:\abc\1.txt)

  15. )   
  16.    popd
  17. )
  18. pause
复制代码
上面是我的代码,我的想法是

判断如果有重名的,不copy, 然后输出来一个文本里也就是D:\abc\1.txt,

如果不重名就copy ,

可以我设置了子目录里有重名的,没有输出,

这是啥情况 ,应该是覆盖了

情景 就是 ,

多个子目录里的jpg复制到子目录的根目录里去

,有可能会有重名,

这样应该怎么做呢
发表于 2021-12-14 12:07:16 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2021-12-14 14:32 编辑
  1. @echo off
  2. (for /f "delims=" %%i in ('dir /b /ad') do (
  3.     pushd "%%i"
  4.     for /f "delims=" %%a in ('dir /b /a-d *.jpg') do (
  5.         if not exist "%~dp0%%a" (
  6.             copy "%%i" "%~dp0">nul
  7.         ) else (
  8.             echo,%%~fa
  9.         )
  10.     )
  11.     popd
  12. ))>"D:\abc\1.txt"
  13. pause
复制代码
 楼主| 发表于 2021-12-14 13:19:28 | 显示全部楼层
  1. @echo off
  2. (for /f "delims=" %%i in ('dir /b /ad') do (
  3.     pushd "%%i"
  4.     for /f "delims=" %%a in ('dir /b /s /a-d *.jpg') do (
  5.         if not exist "%%~fi\%%a" (
  6.             copy "%%a" "%%i">nul
  7.         ) else (
  8.             echo,%%~fa
  9.         )
  10.     )
  11.     popd
  12. ))>"D:\abc\1.txt"
  13. pause
复制代码
回复 2# qixiaobin0715

按你的我改了一下,但是没有输出出来,上面的是我想要的,但没有输出
发表于 2021-12-14 14:17:32 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2021-12-14 14:22 编辑

如果有不存在的文件夹要先创建。
另外要注意有参数/s和没有参数/s,循环变量%%a的值有何差异。
发表于 2021-12-14 14:39:31 | 显示全部楼层
最好能说一下你的实际需求,刚刚注意到你的两段代码好像表达的意思不一样。由于代码错误,单从代码上看不知你到底想要如何。
 楼主| 发表于 2021-12-14 20:04:31 | 显示全部楼层
回复 5# qixiaobin0715

有个姓名的文件夹目录 ,张三 李四等等

每个姓名文件夹下面有

若干文件夹,这若干文件夹下面有可能还有文件夹,
现在就是要把姓名文件夹下面的 所有文件夹图片复制到   

姓名文件夹里,

也就是把图片从包括 的文件夹中复制出来
这么说可以理解吗
 楼主| 发表于 2021-12-14 20:05:22 | 显示全部楼层
回复 4# qixiaobin0715


    加/s是怕里面还有了文件夹不是
 楼主| 发表于 2021-12-14 20:10:19 | 显示全部楼层
回复 5# qixiaobin0715


    传网盘了,你看下
就是分别复制到名字的根目录去
链接:https://pan.baidu.com/s/1tiMDUHv3IORyISDGy8ozDA
提取码:1111
发表于 2021-12-14 20:15:01 | 显示全部楼层
本帖最后由 qixiaobin0715 于 2021-12-14 20:16 编辑
  1. @echo off
  2. (for /f "delims=" %%i in ('dir /b /ad') do (
  3.     pushd "%%i"
  4.     for /f "delims=" %%a in ('dir /s /b /a-d *.jpg') do (
  5.         if not exist "%%~nxa" (
  6.             copy "%%a">nul
  7.         ) else (
  8.             echo,%%a
  9.         )
  10.     )
  11.     popd
  12. ))>"D:\abc\1.txt"
  13. pause
复制代码
未测试
 楼主| 发表于 2021-12-14 20:32:33 | 显示全部楼层
回复 9# qixiaobin0715


    if not exist "%%~fi\%%a" (
            copy "%%a" "%%i">nul
这么写为啥有问题??
发表于 2021-12-14 20:42:47 | 显示全部楼层
回复 10# swanseabrian
你已经通过pushd将路径标记在了%%i文件夹下,如果在写一个%%i就相当于将文件复制在你刚标记的目录下的名字为“%%i”的文件夹(路径下的子文件夹)里面。
 楼主| 发表于 2021-12-14 20:42:55 | 显示全部楼层
回复 9# qixiaobin0715


     if not exist "%%~nxa"
if not exist "%%~fi\%%a"
这两句不是一个意思吗?
 楼主| 发表于 2021-12-14 20:44:38 | 显示全部楼层
回复 11# qixiaobin0715


    这个确实 是比较 神奇的地方,确实没有概念
发表于 2021-12-14 20:54:06 | 显示全部楼层
回复 12# swanseabrian
实际上这个问题在4楼已做过说明,你在此处加两行代码就明白了:
  1. echo,%%~nxa
  2. echo,%%~fi\%%a
  3. pause
复制代码
 楼主| 发表于 2021-12-14 22:16:18 | 显示全部楼层
回复 14# qixiaobin0715


    也就是说 push到目录下之后,对目录之外的操作是不对的,对吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-3-20 16:34 , Processed in 0.017611 second(s), 7 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

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