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

【练习-073】批处理模拟XCOPY批量复制文本文件

本帖最后由 batman 于 2013-11-5 23:36 编辑

出题目的:
    1、考查大家的文本文件处理能力
    2、活跃大家的批处理思维
加分原则:
    1、成功完成PB+20
    2、出色完成PB+40
    3、思路独特PB另+20~40
    4、公认绝妙方案和代码PB+100技术+1
题目如下:
    现有文件夹D:\MY FOLDER,内有文件夹及子文件夹层数和数目均末知,每个文件夹下有或没有文本文件数目也末知,
现在要求通过批处理将MY FOLDER文件夹及其下所有的文件夹(包含空文件夹)及文件都复制到F:\BACK下,除了目录名为
bathome的文件夹以及后缀名为.org的文件。要求不能使用xcopy、copy命令及其他类似的第三方命令行工具,同时请考虑
所有文本文件要原样被复制出来,不要求考虑编码问题。
***共同提高***

本帖最后由 foxJL 于 2013-11-7 22:36 编辑

更新了,交作业
  1. @echo off
  2. for /f "delims=" %%i in ('dir /s /b "d:\MY FOLDER\"^|find /v "\bathome\"') do (
  3.     if exist "%%i\" (if /i not "%%~ni"=="bathome" md "f:\back%%~pni") else (
  4.     if /i not "%%~xi"==".org" type "%%i" >"f:\back%%~pnxi")
  5. )
复制代码
1

评分人数

    • batman: *.*多余了 盘符啊PB + 30

TOP

满屏幕的PowerShell,我还以为这里变成PowerShell论坛了。

其实这个练习跟文本处理关系不大,先围观一下。

TOP

本帖最后由 batman 于 2013-11-6 08:31 编辑

回复 3# Demon


    纯文本处理的方法也不是不行的。。。
   从本题开始,拟将陆续推出模拟基础命令功能的批处理练习
***共同提高***

TOP

本帖最后由 xxpinqz 于 2013-11-6 22:51 编辑

第一个要求还真没注意。。。
  1. @echo off&setlocal enabledelayedexpansion
  2. set "src=d:\MY FOLDER"
  3. (for /f "delims=" %%a in ('dir /s /b "%src%"') do (
  4.     set "str=%%a"
  5.     set "str=!str:%src%=F:\BACK\MY FOLDER!"
  6.     if exist "%%a\" (
  7.         set "str=!str!\"         
  8.         if "!str:\bathome\=!"=="!str!" md "!str!"
  9.     ) else (
  10.         if /I not "%%~xa"==".bat" type "%%a" >"!str!"
  11.     )
  12. ))2>nul
复制代码
改至2楼代码。。。。。。
1

评分人数

初学BAT,非专业。代码不适当之处还望前辈们多多指点。在此表示感谢!

TOP

回复 5# xxpinqz


学习学习!
很巧妙的解决了空目录

TOP

2楼和5楼共同犯的两个错误:
1、题意是要把MY FOLDER文件夹也复制过去,你们全没理解?
2、你们的判断bathome目录名的方法会将含bathome字符串的路径也排除了。
同时,2楼代码使用了两次遍历,效率被大大降低
所以,暂不给分,请修改完善自己的代码哦。。。
***共同提高***

TOP

本帖最后由 terse 于 2013-11-7 16:45 编辑

也想不出好办法来  想到再补上
  1. @echo off
  2. set "src=D:\my folder"
  3. set "find=findstr /ivc:"\\bathome\\" |findstr /ivec:"\\bathome" |findstr /ivec:".org""
  4. setlocal enabledelayedexpansion
  5. for /f "delims=" %%i in ('dir /s /b "%src%"^|!find!') do (
  6.     set "str=%%i"
  7.     if exist "%%i\" (
  8.        md "!str:%src%=F:\back\my folder!"
  9.     ) else >"!str:%src%=F:\back\my folder!" type "%%i"
  10. )
  11. pause
复制代码

TOP

回复 8# terse


    我等你的好思路。。。
***共同提高***

TOP

目测 2楼么有排除bathome文件夹吧

TOP

回复 10# terse


    有啊,这句if /i not "%%~ni"=="bathome"

TOP

回复 11# foxJL

这个是创建文件夹的判断最后的
如中间存在还是会忽略的

TOP

回复 12# terse

好像是哦,没有考虑周全.感谢提醒!

TOP

返回列表