标题: 【练习-073】批处理模拟XCOPY批量复制文本文件 [打印本页]
作者: batman 时间: 2013-11-5 21:18 标题: 【练习-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-5 23:00
本帖最后由 foxJL 于 2013-11-7 22:36 编辑
更新了,交作业- @echo off
- for /f "delims=" %%i in ('dir /s /b "d:\MY FOLDER\"^|find /v "\bathome\"') do (
- if exist "%%i\" (if /i not "%%~ni"=="bathome" md "f:\back%%~pni") else (
- if /i not "%%~xi"==".org" type "%%i" >"f:\back%%~pnxi")
- )
复制代码
作者: Demon 时间: 2013-11-6 00:39
满屏幕的PowerShell,我还以为这里变成PowerShell论坛了。
其实这个练习跟文本处理关系不大,先围观一下。
作者: batman 时间: 2013-11-6 08:29
本帖最后由 batman 于 2013-11-6 08:31 编辑
回复 3# Demon
纯文本处理的方法也不是不行的。。。
从本题开始,拟将陆续推出模拟基础命令功能的批处理练习
作者: xxpinqz 时间: 2013-11-6 11:23
本帖最后由 xxpinqz 于 2013-11-6 22:51 编辑
第一个要求还真没注意。。。- @echo off&setlocal enabledelayedexpansion
- set "src=d:\MY FOLDER"
- (for /f "delims=" %%a in ('dir /s /b "%src%"') do (
- set "str=%%a"
- set "str=!str:%src%=F:\BACK\MY FOLDER!"
- if exist "%%a\" (
- set "str=!str!\"
- if "!str:\bathome\=!"=="!str!" md "!str!"
- ) else (
- if /I not "%%~xa"==".bat" type "%%a" >"!str!"
- )
- ))2>nul
复制代码
改至2楼代码。。。。。。
作者: foxJL 时间: 2013-11-6 11:43
回复 5# xxpinqz
学习学习!
很巧妙的解决了空目录
作者: batman 时间: 2013-11-6 22:16
2楼和5楼共同犯的两个错误:
1、题意是要把MY FOLDER文件夹也复制过去,你们全没理解?
2、你们的判断bathome目录名的方法会将含bathome字符串的路径也排除了。
同时,2楼代码使用了两次遍历,效率被大大降低
所以,暂不给分,请修改完善自己的代码哦。。。
作者: terse 时间: 2013-11-7 02:46
本帖最后由 terse 于 2013-11-7 16:45 编辑
也想不出好办法来 想到再补上- @echo off
- set "src=D:\my folder"
- set "find=findstr /ivc:"\\bathome\\" |findstr /ivec:"\\bathome" |findstr /ivec:".org""
- setlocal enabledelayedexpansion
- for /f "delims=" %%i in ('dir /s /b "%src%"^|!find!') do (
- set "str=%%i"
- if exist "%%i\" (
- md "!str:%src%=F:\back\my folder!"
- ) else >"!str:%src%=F:\back\my folder!" type "%%i"
- )
- pause
复制代码
作者: batman 时间: 2013-11-7 18:46
回复 8# terse
我等你的好思路。。。
作者: terse 时间: 2013-11-7 19:25
目测 2楼么有排除bathome文件夹吧
作者: foxJL 时间: 2013-11-7 19:56
回复 10# terse
有啊,这句if /i not "%%~ni"=="bathome"
作者: terse 时间: 2013-11-7 20:02
回复 11# foxJL
这个是创建文件夹的判断最后的
如中间存在还是会忽略的
作者: foxJL 时间: 2013-11-7 21:05
回复 12# terse
好像是哦,没有考虑周全.感谢提醒!
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |