编写批处理文件,使所有文件复制到指定位置,并重命名

编写批处理文件
使得:批处理文件所在文件夹中的所有文件(包括子文件夹中的)复制到指定位置,并按照文件夹-文件名重命名
我表述可能不太清楚,现在重新表述:
我现在需要的是单纯复制所有文件夹下的文件到 “e:\新建文件夹” ,而不包括文件夹,也就是说,复制后, “e:\新建文件夹” 中,只有文件,而没有任何文件夹。
另外我需要在拷贝后,重命名为“原文件夹名-原文件名”

@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%i in ('dir /a-d /s /b %~dp0\*.*') do (
SET fp=%%~dpi
SET fp=!fp:%~dp0=!-%%~nxi
SET fp=!fp:\=!
XCOPY "%%i" "e:\新建文件夹\!fp!" /c /h /d
)
PAUSE

注意:复制粘贴时请把记事本的自动换行选项关掉.以防止粘贴时出现格式问题.

追问

谢谢!
运行后,显示“文件名、目录名或卷标语法不正确”。这是怎么回事呀

追答@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%i in ('dir /a-d /s /b %~dp0\*.*') do (
SET fp=%%~dpi
SET fp=!fp:%~dp0=!-%%~nxi
SET fp=!fp:\=!
ECHO !fp!
COPY "%%i" "e:\新建文件夹\!fp!"
)
PAUSE

追问

哥们,还是有那个问题。。。

追答

运行截图和你的目录结构截图.

追问

哥们,你太强了,搞定了。
我是这样,我一个只有一级子目录的文件夹中搞定了,在有二级子目录的文件夹中就出现上面的问题了,哈哈,这个问题能否解决呀?
太强了,先把奖励给你了

追答@ECHO OFF&SETLOCAL ENABLEDELAYEDEXPANSION
FOR /f "delims=" %%i in ('dir /a-d /s /b %~dp0\*.*') do (
SET fp=%%~dpi
SET fp=!fp:%~dp0=!
SET fp=!fp:\=-!%%~nxi
SET fp=!fp:\=!
ECHO !fp!
REM COPY "%%i" "e:\新建文件夹\!fp!"
)
PAUSE

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-08-01
@echo off&setlocal enabledelayedexpansion
for /f "delims=" %%a in ('dir /b/s/a-d') do (
    set "str=%%~pa"
    for /f "delims=" %%b in ("!str:\=.!") do (
        set "str=%%~xb"
        copy "%%a" "e:\新建文件夹\!str:~1!-%%~nxa"
    )
)

第2个回答  2013-08-01
1. 如果仅将文件的上级文件夹作为新文件名的一部分,代码如下:
@echo off&setlocal enabledelayedexpansion
for /r "%~dp0" %%i in (*.*) do (
set "str=%%~dpi"
set "str=!str:~0,-1!"
for %%j in ("!str!") do copy "%%i" "e:\新建文件夹\%%~nxj-%%~nxi">nul
)

2. 如果需要要将各级子文件夹作为新文件名的一部分,代码如下:
@echo off&setlocal enabledelayedexpansion
for /r "%~dp0" %%i in (*.*) do (
set "str=%%~i"
set "str=!str:%~dp0=!"
copy "%%i" "e:\新建文件夹\!str:\=-!" >nul
)
第3个回答  2013-08-01
@echo off
xcopy . 指定位置 /e追问

如何完成重命名呢?
指定文件夹比如是:e盘根目录下的“新建文件夹”,如何编写

追答

@echo off

xcopy . e:\新建文件夹 /e

追问

可能是我表述不清楚,导致了你误解。
我现在需要的是单纯复制所有文件夹下的文件到指定文件夹,而不包括文件夹,也就是说,复制后,指定文件夹下,只有文件,而没有任何文件夹。
另外我需要在拷贝后,重命名为“原文件夹名-原文件名”,你这个程序没有做到

追答

@echo off

for /r %cd% %1 in (*.*) do copy %1 e:\新建文件夹

这个就只复制文件

你说"另外我需要在拷贝后,重命名为“原文件夹名-原文件名”,你这个程序没有做到"我不是很明白

如果你是要把e:\新建文件夹 改名成批处理文件所在文件夹的名字,那就

@echo off
xcopy .\*.* e:\ /e

追问

是这样,比如,我有很多子文件夹,如“20130701”,“20130702”这样以日期为名字的文件夹,每个文件夹中,又有5个文件,如“搞笑”,“快乐”等照片文件。
我现在想把所有文件复制到“e:\新建文件夹”中,并命名为“20130701-搞笑”,“20130701-快乐”,“20130702-搞笑”,“20130702-快乐”这样的文件名
十分感谢你的耐心回答

相似回答