标题: [文件操作] 批处理复制文件 重名 问题 [打印本页]
作者: swanseabrian 时间: 2021-12-14 10:29 标题: 批处理复制文件 重名 问题
- @echo off&setlocal enabledelayedexpansion
-
- for /f "delims=:" %%i in ('dir /b /ad') do (
-
- echo "%%i"
- pushd "%%i"
- for /f "delims=:" %%a in ('dir /b /a-d *.jpg') do (
-
- if not exist "%%~fi\%%a" (
- echo "%%~fa"
- set name="%%~fa"
- copy /y !name! "%%i")
- if exist "%%~fi\%%a" (
- set name="%%~fa"
- echo !name!>>D:\abc\1.txt)
-
- )
- popd
- )
- pause
复制代码
上面是我的代码,我的想法是
判断如果有重名的,不copy, 然后输出来一个文本里也就是D:\abc\1.txt,
如果不重名就copy ,
可以我设置了子目录里有重名的,没有输出,
这是啥情况 ,应该是覆盖了
情景 就是 ,
多个子目录里的jpg复制到子目录的根目录里去
,有可能会有重名,
这样应该怎么做呢
作者: qixiaobin0715 时间: 2021-12-14 12:07
本帖最后由 qixiaobin0715 于 2021-12-14 14:32 编辑
- @echo off
- (for /f "delims=" %%i in ('dir /b /ad') do (
- pushd "%%i"
- for /f "delims=" %%a in ('dir /b /a-d *.jpg') do (
- if not exist "%~dp0%%a" (
- copy "%%i" "%~dp0">nul
- ) else (
- echo,%%~fa
- )
- )
- popd
- ))>"D:\abc\1.txt"
- pause
复制代码
作者: swanseabrian 时间: 2021-12-14 13:19
- @echo off
- (for /f "delims=" %%i in ('dir /b /ad') do (
- pushd "%%i"
- for /f "delims=" %%a in ('dir /b /s /a-d *.jpg') do (
- if not exist "%%~fi\%%a" (
- copy "%%a" "%%i">nul
- ) else (
- echo,%%~fa
- )
- )
- popd
- ))>"D:\abc\1.txt"
- pause
复制代码
回复 2# qixiaobin0715
按你的我改了一下,但是没有输出出来,上面的是我想要的,但没有输出
作者: qixiaobin0715 时间: 2021-12-14 14:17
本帖最后由 qixiaobin0715 于 2021-12-14 14:22 编辑
如果有不存在的文件夹要先创建。
另外要注意有参数/s和没有参数/s,循环变量%%a的值有何差异。
作者: qixiaobin0715 时间: 2021-12-14 14:39
最好能说一下你的实际需求,刚刚注意到你的两段代码好像表达的意思不一样。由于代码错误,单从代码上看不知你到底想要如何。
作者: swanseabrian 时间: 2021-12-14 20:04
回复 5# qixiaobin0715
有个姓名的文件夹目录 ,张三 李四等等
每个姓名文件夹下面有
若干文件夹,这若干文件夹下面有可能还有文件夹,
现在就是要把姓名文件夹下面的 所有文件夹图片复制到
姓名文件夹里,
也就是把图片从包括 的文件夹中复制出来
这么说可以理解吗
作者: swanseabrian 时间: 2021-12-14 20:05
回复 4# qixiaobin0715
加/s是怕里面还有了文件夹不是
作者: swanseabrian 时间: 2021-12-14 20:10
回复 5# qixiaobin0715
传网盘了,你看下
就是分别复制到名字的根目录去
链接:https://pan.baidu.com/s/1tiMDUHv3IORyISDGy8ozDA
提取码:1111
作者: qixiaobin0715 时间: 2021-12-14 20:15
本帖最后由 qixiaobin0715 于 2021-12-14 20:16 编辑
- @echo off
- (for /f "delims=" %%i in ('dir /b /ad') do (
- pushd "%%i"
- for /f "delims=" %%a in ('dir /s /b /a-d *.jpg') do (
- if not exist "%%~nxa" (
- copy "%%a">nul
- ) else (
- echo,%%a
- )
- )
- popd
- ))>"D:\abc\1.txt"
- pause
复制代码
未测试
作者: swanseabrian 时间: 2021-12-14 20:32
回复 9# qixiaobin0715
if not exist "%%~fi\%%a" (
copy "%%a" "%%i">nul
这么写为啥有问题??
作者: qixiaobin0715 时间: 2021-12-14 20:42
回复 10# swanseabrian
你已经通过pushd将路径标记在了%%i文件夹下,如果在写一个%%i就相当于将文件复制在你刚标记的目录下的名字为“%%i”的文件夹(路径下的子文件夹)里面。
作者: swanseabrian 时间: 2021-12-14 20:42
回复 9# qixiaobin0715
if not exist "%%~nxa"
if not exist "%%~fi\%%a"
这两句不是一个意思吗?
作者: swanseabrian 时间: 2021-12-14 20:44
回复 11# qixiaobin0715
这个确实 是比较 神奇的地方,确实没有概念
作者: qixiaobin0715 时间: 2021-12-14 20:54
回复 12# swanseabrian
实际上这个问题在4楼已做过说明,你在此处加两行代码就明白了:- echo,%%~nxa
- echo,%%~fi\%%a
- pause
复制代码
作者: swanseabrian 时间: 2021-12-14 22:16
回复 14# qixiaobin0715
也就是说 push到目录下之后,对目录之外的操作是不对的,对吧
作者: qixiaobin0715 时间: 2021-12-14 22:29
回复 15# swanseabrian
没说到点子上,你非要这么折腾也行,将9楼代码5~6行改为:- if not exist "%%~fi\%%~nxa" (
- copy "%%a" "%%~fi">nul
复制代码
但是这样不是多此一举吗。
作者: qixiaobin0715 时间: 2021-12-14 22:34
本帖最后由 qixiaobin0715 于 2021-12-14 22:36 编辑
要注意加上参数/s后,%%a的值是带有路径的。所以要取文件名及扩展名,即%%~nxa。否则的话,这样写%%~fi\%%a,就会乱套的。
作者: swanseabrian 时间: 2021-12-15 11:01
回复 17# qixiaobin0715
这个知识点确实不知道啊,所以有点乱套,多谢谢大神
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |