中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-08-12 02:32
47,811 主题排行 / 349,897 发帖 / 今日 0 篇 / 48,256 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]文件的替换判断
可打印版本  993 / 1
第1楼 coldface 发表于 2010-10-22 11:49
初级用户 发帖 70 积分 71
[求助]文件的替换判断
需求:
用某文件夹下的文件替换另一文件夹下(包含子目录)的文件。
对用户输入的文件路径做判断,如果为空则报错,如果路径不存在则报错。
如果文件为空则报错。如果输入的路径正确且文件夹下不为空则替换到另一文件夹下,在替换完毕后提示从哪个目录下替换了多少个文件到目的目录。

基本的替换工作完成了,但是对判断那块不成功:
@echo off
:input
set /p Newfilepath=请输入新文件的路径(支持文件夹拖放):
set "Newfilepath=%Newfilepath:"=%" //这句替换",是为了防止文件夹名中包含空格情况下,用鼠标拖的时候会产生"
set /p Reppath=请输入被替换文件的路径(支持文件夹拖放):
set "Reppath=%Reppath:"=%"
if "%Newfilepath%"=="请输入新文件的路径(支持文件夹拖放):" goto err
//此句是为了判断如果输入为空的情况
if "%Reppath%"=="请输入被替换文件的路径(支持文件夹拖放):" goto err
if not exist "%Newfilepath%" goto input
if not exist "%Reppath%" goto input
set n=0
for /f "delims=" %%a in ('dir/a/s/b "%Newfilepath%" ') do (
set n+=1
for /f "delims=" %%c in ('dir/ad/s/b ""%Reppath%"') do (
xcopy /y "%%a" "%%c"
goto Congra
)
)

:Congra
echo 恭喜您,%Newfilepath%下的!n!个文件已经替换到"%Reppath%
:err
echo 您未输入路径,请按键选择:
echo 1 重新输入文件路径
echo 2 退出
set choice=默认2
set /P choice=选择1,2继续(直接回车默认选择2)
if /i '%choice%'=='1' goto 1
if /i '%choice%'=='2' goto 2
if /i '%choice%'=='默认2' goto 2
:2
exit
麻烦帮忙完善下!谢谢!
第2楼 coldface 发表于 2010-10-22 15:38
初级用户 发帖 70 积分 71
我修改了下,但是怎么不支持中文文件夹或者中文命名的文件的复制的?
@echo off&setlocal ENABLEDELAYEDEXPANSION
color 34
set /p Newfilepath=请输入新文件的路径(支持文件夹拖放后回车):
echo ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
echo 请输入被替换文件的路径
echo 1 默认路径c:\gameserver
echo 2 请输入新文件的路径(支持文件夹拖放后回车):
echo ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
set choice=默认1
set /P choice=选择1,2继续(直接回车默认选择1)
if /i '%choice%'=='1' goto P1
if /i '%choice%'=='2' goto P2
if /i '%choice%'=='默认1' goto P1
:P1
set "Newfilepath=%Newfilepath:"=%"
for /f "delims=" %%a in ('dir/a/s/b "%Newfilepath%" ') do (

for /f "delims=" %%c in ('dir/ad/s/b "c:\gameserver"') do (
xcopy /y "%%a" "%%c"
goto Congra

)

)
:P2
set /p Replpath2=请输入被替换文件的路径(支持文件夹拖放后回车):
set "Newfilepath=%Newfilepath:"=%"
set "Replpath2=%Replpath2:"=%"
for /f "delims=" %%f in ('dir/a/s/b "%Newfilepath%" ') do (

for /f "delims=" %%g in ('dir/ad/s/b "%Replpath2%"') do (
xcopy /y "%%f" "%%g"

goto Congra
)

)
:Congra
echo ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
echo 成功复制
echo ◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆
pause
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023