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

[文件操作] [已解决]批处理命令copy链接文件的区别

本帖最后由 mqyphts 于 2015-6-10 08:44 编辑

自己写了一段代码,目的是在文件头添加上当前的时间 和文件名
代码一如下
  1. ::apend filename and time in the file head
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. echo starting..
  5. set extention=.txt
  6. set t=%date%  %time%
  7. for /f "delims=" %%n in ('dir /b *%extention%') do (
  8. set a=%%n
  9. echo ::%t% !a!>tmp
  10. echo. >>tmp
  11. copy  tmp+"!a!" "!a!"
  12. )
  13. set extention=
  14. set a=
  15. del /f /q tmp
  16. echo finished.
  17. pause
复制代码
可是经过测试,copy之后生成的文件只有tmp里的内容,不知道怎么回事
网上搜索资料,修改代码如下即可达到的
修改之后的代码
  1. ::apend filename and time in the file head
  2. @echo off
  3. setlocal enabledelayedexpansion
  4. echo starting..
  5. set extention=.txt
  6. set t=%date%  %time%
  7. for /f "delims=" %%n in ('dir /b *%extention%') do (
  8. set a=%%n
  9. echo ::%t% !a!>tmp
  10. echo. >>tmp
  11. copy  tmp+"!a!" temp
  12. del /f /q "!a!"
  13. ren temp "!a!"
  14. )
  15. set extention=
  16. set a=
  17. del /f /q tmp
  18. echo finished.
  19. pause
复制代码
修改的地方主要是for循环里的语句,增加了一个临时文件,然后将临时文件重命名,但是使用
#########
copy  tmp+"!a!" "!a!"
######
copy  tmp+"!a!" temp
del /f /q "!a!"
ren temp "!a!"
######
这两者的区别是什么呢
初学者求教。
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

本帖最后由 Bella 于 2015-5-31 00:24 编辑

copy读取前会新建一个空的目标文件,如果有重名就直接清空了,所以你读不到源文件的内容.
  1. @echo off
  2. for /f "delims=" %%a in ('dir /b *.txt') do (
  3.     (
  4.         echo ::%date% %time% %%a
  5.         echo;
  6.         type "%%a"
  7.     ) > tmp
  8.     move tmp "%%a" > nul
  9. )
  10. pause
复制代码
1

评分人数

TOP

回复 2# Bella


    谢谢啊,你讲的很清楚,我懂了。而且你的代码更精练。

TOP

返回列表