标题: [文件操作] 【已解决】批处理怎样把文件或文件夹复制到某路径下带关键字(多个)的文件夹中 [打印本页]
作者: toyerspollors 时间: 2021-2-20 22:45 标题: 【已解决】批处理怎样把文件或文件夹复制到某路径下带关键字(多个)的文件夹中
本帖最后由 toyerspollors 于 2021-2-26 16:31 编辑
- @echo off
- set F=%date:~5,2%%date:~8,2%
- md ".\%F%总文件夹\432 小张-小红-s5"
- md ".\%F%总文件夹\673 大军-阿四-01"
- md ".\%F%总文件夹\gg3 大军-小冰-77"
- md ".\%F%总文件夹\8lr 小齐-大宝-41"
- md ".\%F%总文件夹\623 李哥-三弟-5y"
- md ".\测试1 复制-目标-2"
- md ".\测试2 复制-目标(基友)-2"
- md ".\测试2 复制-目标(基友)-2\123"
- echo >".\测试1 复制-目标-2\list.txt"
- echo >".\测试2 复制-目标(基友)-2\list2.txt"
- echo >".\测试3 复制-list-8.txt"
- echo >".\测试4 复制-test(基友)-97.docx"
- echo >".\测试2 复制-目标(基友)-2\11\df3d 基友-小萧-66.mp3"
- cls
-
- :top
- echo.
- echo.
- echo.
- set /p 源文件=把要复制的文件拖拽进来==》
- set 输出目标路径=.\%F%总文件夹
- set F=%date:~5,2%%date:~8,2%
- for /f "tokens=*" %%a in ('dir /ad/b ".\%输出目标路径%"') do (
- xcopy "%源文件%" /y ".\%输出目标路径%\%%a\"
- )
-
- pause
- goto :top
复制代码
新手求学
上面代码前面16行是创建好测试需要用到的文件夹层级和文件。22-28行,实现的效果是,运行bat文件后,把要复制的文件拖到黑色窗口上,确认后会把拖拽进来的文件复制到“%F%总文件夹”这个目录层级下的所有文件夹中(不遍历所有子级)。
问题1:我只是会写以上复制文件的代码,但是我也想用这种拖拽到窗口的方式来复制文件夹,把文件夹复制到“%F%总文件夹”这个目录层级下的所有文件夹中(不遍历所有子级)。不知道怎么写?能否在一个bat中兼顾到既能复制文件,又能复制文件夹呢?
问题2: 我想实现把文件或文件夹复制到带有关键字(多个)的文件夹中,例如“%F%总文件夹”这个目录层级下有多个文件夹,但是我只想复制给文件夹的命名带有关键字“大军“、”三弟“的文件夹里,不知道如何编写代码?复制文件夹的话,要把整个主目录文件夹复制过去,而不是只复制主目录里面的子文件夹和文件。关键字是能直接写在代码上的,不要使用调用txt文档来识别关键字。
注意:
我的操作是,把要复制的文件或文件夹拖拽到运行后的bat窗口中,而不是直接拖到bat文件的图标上。
另外测试的“源文件(文件夹)”和“%F%总文件夹”目录层级下的文件夹在命名上是带有空格字符的,代码要支持带有空格字符。
希望老师们帮助一下,让我借此也能学习一些bat知识,谢谢!
作者: toyerspollors 时间: 2021-2-24 09:44
本帖最后由 toyerspollors 于 2021-2-24 09:48 编辑
效果实例
smss 发表于 2021-2-23 10:57
- set /p 源文件=把要复制的文件拖拽进来==》
- set 输出目标路径=.\%F%总文件夹
- set F=%date:~5,2%%date:~8,2%
- for /f "tokens=*" %%a in ('dir /ad/b ".\%输出目标路径%"') do (
- xcopy "%源文件%" /y ".\%输出目标路径%\%%a\"
- )
复制代码
首先谢谢老师在百忙中给予帮助!
但我需要的操作是,把要复制的文件或文件夹拖拽到运行后的bat窗口中,如以上代码的效果。而不是直接拖到bat文件的图标上实现复制。
你给出的代码我测试不成功,我是先把要复制的文件拖拽到你这个代码的bat文件图标上,然后输入最后输出复制到哪个文件夹的关键字。确认后产生的效果是会在bat文件目录下,自动生成一个以当天日期命名的文件夹,然后要复制的东西会复制到这个新创建的文件夹中。但本人新手表示看不懂你这些复杂的代码,不会去修改满足自己的需要。
在1楼我重新编辑了问题内容,可能会比之前好理解一些了。
作者: cutebe 时间: 2021-2-24 14:47
一思路、判断一下目录/文件 区别对待,复制整个目录用xcopy /y /e /i,复制文件用copy /y
二思路、没有特殊字符的话,关键字用 字符替换对比 / findstr查找识别 过滤出来
作者: toyerspollors 时间: 2021-2-24 15:13
本帖最后由 toyerspollors 于 2021-2-24 15:15 编辑
回复 4# cutebe
暂时还没学会使用 / findstr , 问题2的代码能帮写一下吗?源文件(文件夹)与带有关键字的文件夹都是有空格的,谢谢!
作者: smss 时间: 2021-2-24 17:17
本帖最后由 smss 于 2021-2-24 17:32 编辑
- @Echo off&SetLocal EnableDelayedExpansion&if "%~1"=="" echo 拖拽目标至%~n0即可&ping 0 -n "3">nul&exit
- set "X=%~a1"&set F=%date:~5,2%%date:~8,2%总文件夹&if not exist %~dp0!F! md %~dp0!F!
- if "!X:~0,1!"=="d" (xcopy /ciserh "%~1" "%~dp0!F!\%~n1"&goto A)else (set /p Y=把该文件放入如"大军"和"大宝"的文件夹中请输文件夹名:
- if not exist "%~dp1!F!\!Y!" md "%~dp1!F!\!Y!"
- copy "%~1" "%~dp1!F!\!Y!\%~nx1")
- :A
- echo 复制完毕!&ping 0 -n "2">nul&exit
复制代码
- @Echo off&SetLocal EnableDelayedExpansion&if "%~1"=="" set /p X=拖拽目标至%~n0回车确认即可
- set F=%date:~5,2%%date:~8,2%总文件夹&if not exist %~dp0!F! md %~dp0!F!
- set /p Y=把该文件放入!F!下指定文件夹:
- if not exist "%~dp1!F!\!Y!" md "%~dp1!F!\!Y!"
- copy "%~1" "%~dp1!F!\!Y!\%~nx1"||xcopy /ciserh "%~1" "%~dp0!F!\!Y!\%~n1"
- echo 复制完毕!&ping 0 -n "2">nul&exit
复制代码
作者: cutebe 时间: 2021-2-24 17:30
复制到所有一级子目录- ::复制文件/目录到目标一级子目录
- @echo off
- :top
- set /p 源文件=把要复制的文件拖拽进来==》
- set F=%date:~5,2%%date:~8,2%
- set "输出目标路径=%F%总文件夹"
- call :fdcopy %源文件% "%输出目标路径%"
- goto :top
-
- :fdcopy 源 目标
- for /f "delims=" %%a in ('dir /ad/b "%~2"') do (
- if exist "%~1\" (
- xcopy /y/e/i "%~1" "%~2\%%a\%~nx1"
- )else copy /y "%~1" "%~2\%%a"
- )
- goto :eof
复制代码
仅复制到关键字子目录- ::复制文件/目录到目标一级关键字子目录
- @echo off
- :top
- set /p 源文件=把要复制的文件拖拽进来==》
- set F=%date:~5,2%%date:~8,2%
- set "输出目标路径=%F%总文件夹"
- call :fdcopy %源文件% "%输出目标路径%"
- goto :top
-
- :fdcopy 源 目标
- set "关键字1=673 大军"
- set "关键字2=8lr 小齐"
- for /f "delims=" %%a in ('"dir /ad/b "%~2"|findstr /ic:"%关键字1%" /c:"%关键字2%""') do (
- if exist "%~1\" (
- xcopy /y/e/i "%~1" "%~2\%%a\%~nx1"
- )else copy /y "%~1" "%~2\%%a"
- )
- goto :eof
复制代码
作者: toyerspollors 时间: 2021-2-26 16:32
复制到所有一级子目录仅复制到关键字子目录
cutebe 发表于 2021-2-24 17:30
6楼的代码解决了我的问题,谢谢!
作者: toyerspollors 时间: 2021-2-26 16:34
smss 发表于 2021-2-24 17:17
我测试了你的代码,可能是我不会使用吧,没能成功,我也看不懂,感觉乱乱的,不太会查找错误的地方去修改。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |