Board logo

标题: [文件操作] [已解决]求powershell或bat 解决文件拷贝问题 [打印本页]

作者: realchris    时间: 2015-4-8 16:08     标题: [已解决]求powershell或bat 解决文件拷贝问题

本帖最后由 realchris 于 2015-4-9 08:57 编辑

电脑上有A、B两个文件夹,A文件夹中的文件名都是8位长的,且第8位不是"s",就是"d"。
如果A文件夹中有两个文件,文件名前7位相同,最后一位分别是s和d,则看做是一对。
例如A文件夹中的文件“1111111s.txt、1111111d.txt”是一对,"2222222s.txt、2222222d.txt"是一对,"kkkkkkks.txt、kkkkkkkd.txt"是一对。。。。
但是也有不是一对的:像是单独的*s.txt或*d.txt(同样文件名长8位)。
要求:
把一对对的文件从A文件夹拷贝到B文件夹中,单独的*s.txt或*d.txt则不拷贝

追加:
拷贝的时候,如果B文件夹中已存在相同文件,则不覆盖
(因为A中的文件很多很大,每次都覆盖的话要花很长时间)

新人求助,请各位帮帮我吧!~
谢谢!!!!
作者: realchris    时间: 2015-4-8 16:55

没学过编程伤不起啊,求助~
个人的思路:

使用get-childitem来获取文件夹下面的子文件夹和文件
然后,使用foreach-object的cmdlet来循环遍历下面的子对象。
然后,通过psiscontainer 属性来判断是文件夹还是文件
如果是文件的话,
定义一个变量到文件名,像是 “变量s.txt”
然后用Test-Path,检查“变量d.txt”是否存在,
如果 “变量d.txt”存在,
则用Copy-Item复制这两个文件到另个文件夹
如果文件已存在则跳过
作者: pcl_test    时间: 2015-4-8 17:04

本帖最后由 pcl_test 于 2015-4-8 17:09 编辑

放进A文件夹里运行
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for %%a in (*.txt) do (
  4. set t=%%~na
  5. if exist "!t:~,-1!s.txt" if exist "!t:~,-1!d.txt" (echo n | copy "!t:~,-1!*.txt" "D:\B\" /-y)
  6. )
  7. pause
复制代码

作者: xxpinqz    时间: 2015-4-8 17:36

  1. *s.txt
复制代码
  1. *.txt
复制代码
更有效率,且无需两个判断。
作者: pcl_test    时间: 2015-4-8 17:45

回复 4# xxpinqz
说的是呢
作者: realchris    时间: 2015-4-9 08:44

多谢楼上的大神!可以了!太感谢啦~




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2