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

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

  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. if not exist "%%~fi\%%a" (
  8. echo "%%~fa"
  9.                                 set name="%%~fa"
  10. copy /y  !name! "%%i")
  11. if  exist "%%~fi\%%a" (
  12. set name="%%~fa"
  13. echo  !name!>>D:\abc\1.txt)
  14. )   
  15.    popd
  16. )
  17. pause
复制代码
上面是我的代码,我的想法是

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

如果不重名就copy ,

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

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

情景 就是 ,

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

,有可能会有重名,

这样应该怎么做呢

本帖最后由 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
复制代码

TOP

  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

按你的我改了一下,但是没有输出出来,上面的是我想要的,但没有输出

TOP

本帖最后由 qixiaobin0715 于 2021-12-14 14:22 编辑

如果有不存在的文件夹要先创建。
另外要注意有参数/s和没有参数/s,循环变量%%a的值有何差异。

TOP

最好能说一下你的实际需求,刚刚注意到你的两段代码好像表达的意思不一样。由于代码错误,单从代码上看不知你到底想要如何。

TOP

回复 5# qixiaobin0715

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

每个姓名文件夹下面有

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

姓名文件夹里,

也就是把图片从包括 的文件夹中复制出来
这么说可以理解吗

TOP

回复 4# qixiaobin0715


    加/s是怕里面还有了文件夹不是

TOP

回复 5# qixiaobin0715


    传网盘了,你看下
就是分别复制到名字的根目录去
链接:https://pan.baidu.com/s/1tiMDUHv3IORyISDGy8ozDA
提取码:1111

TOP

本帖最后由 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
复制代码
未测试

TOP

回复 9# qixiaobin0715


    if not exist "%%~fi\%%a" (
            copy "%%a" "%%i">nul
这么写为啥有问题??

TOP

回复 10# swanseabrian
你已经通过pushd将路径标记在了%%i文件夹下,如果在写一个%%i就相当于将文件复制在你刚标记的目录下的名字为“%%i”的文件夹(路径下的子文件夹)里面。

TOP

回复 9# qixiaobin0715


     if not exist "%%~nxa"
if not exist "%%~fi\%%a"
这两句不是一个意思吗?

TOP

回复 11# qixiaobin0715


    这个确实 是比较 神奇的地方,确实没有概念

TOP

回复 12# swanseabrian
实际上这个问题在4楼已做过说明,你在此处加两行代码就明白了:
  1. echo,%%~nxa
  2. echo,%%~fi\%%a
  3. pause
复制代码

TOP

回复 14# qixiaobin0715


    也就是说 push到目录下之后,对目录之外的操作是不对的,对吧

TOP

返回列表