Board logo

标题: [文件操作] 为什么这段批处理代码del的文件包含中文名的文件,会报找不到文件的错? [打印本页]

作者: fyr000000    时间: 2012-5-15 12:02     标题: 为什么这段批处理代码del的文件包含中文名的文件,会报找不到文件的错?

@echo off&setlocal EnableDelayedExpansion
::取2天之前的日期.set _tian=13下面这句中的13代表天数.
set "_tian=1"
>tmptmp.vbs echo wscript.echo dateadd("d",%_tian%,date)
for /f "tokens=1,2,3* delims=-" %%i in ('cscript logo tmptmp.vbs')  do (
set "y=%%i"&set "m=%%j"&set "d=%%k"
)
set "rq=%y%-%m%-%d%"
echo.&echo 注意:即将删除 %rq% 以前建立的文件

for /f "delims=" %%a in ('dir/b/a-d E:\test_batch\*.*') do (
echo %%a>>fyr21.txt
set "a=0"
for /f "skip=4 delims=" %%b in ('dir/tc "E:\test_batch\%%a"') do (
set /a "a+=1"
if !a! equ 1 (
set "var=%%b"
for /f "tokens=1 delims= " %%c in ("!var!") do set "str=%%c"
echo !str!>>fyr22.txt
if !str! lss !rq! del /q "E:\test_batch\%%a"
)))
del/q tmptmp.vbs
pause

为什么我跑这个批处理
目录里面有中文的
它就会报找不到文件阿
怎么解决问题阿
作者: gawk    时间: 2012-5-15 13:10

把@echo off&删掉,检查一下是哪一行代码在报错,把报错信息贴出来。
作者: fyr000000    时间: 2012-5-15 13:56

E:\>(
echo F2010新帐套_2012-05-111201.dbb 1>>fyr21.txt
set "a=0"
for /F "skip=4 delims=" %b in ('dir/tc "E:\test_batch\F2010新帐套_2012-05-11120
1.dbb"') do (
set /a "a+=1"
if !a! EQU 1 (
set "var=%b"
for /F "tokens=1 delims= " %c in ("!var!") do set "str=%c"
echo !str! 1>>fyr22.txt
if !str! LSS !rq! del /q E:\test_batch\F2010新帐套_2012-05-111201.dbb
)
)
)
找不到文件

E:\>del/q tmptmp.vbs

E:\>pause
请按任意键继续 . . .
作者: gawk    时间: 2012-5-15 14:19

E:\test_batch\F2010新帐套_2012-05-111201.dbb这个文件存在吗?
如果把这个文件名中的“新帐套”删掉就不会报错吗?
作者: fyr000000    时间: 2012-5-15 14:25

对的,好像没有中文就不会报错,还有那个批处理我是在win2000服务器上跑的
作者: fyr000000    时间: 2012-5-15 14:26

文件都是有的
作者: fyr000000    时间: 2012-5-15 14:49

而且我把del显示出来的代码,贴到dos命令里面也是能删除的,真是奇怪
作者: gawk    时间: 2012-5-16 06:45

回复 7# fyr000000


代码第二行加一句:
chcp 936
这样有效果没?
作者: fyr000000    时间: 2012-5-16 09:04

回复 8# gawk


    E:\>定时删除.bat

E:\>setlocal EnableDelayedExpansion

E:\>chcp 936
活动的代码页: 936

E:\>set "_tian=1"

E:\>echo wscript.echo dateadd("d",1,date) 1>tmptmp.vbs

E:\>for /F "tokens=1,2,3* delims=-" %i in ('cscript /nologo tmptmp.vbs') do (set
"y=%i"  & set "m=%j"  & set "d=%k" )

E:\>(set "y=2012"  & set "m=05"  & set "d=17" )

E:\>set "rq=2012-05-17"

E:\>echo. & echo 注意:即将删除 2012-05-17 以前建立的文件

注意:即将删除 2012-05-17 以前建立的文件

E:\>for /F "delims=" %a in ('dir/b/a-d E:\test_batch\*.*') do (
echo %a 1>>fyr21.txt
set "a=0"
for /F "skip=4 delims=" %b in ('dir/tc "E:\test_batch\%a"') do (
set /a "a+=1"
if !a! EQU 1 (
set "var=%b"
for /F "tokens=1 delims= " %c in ("!var!") do set "str=%c"
echo !str! 1>>fyr22.txt
if !str! LSS !rq! del /q "E:\test_batch\%a"
)
)
)

E:\>(
echo F2010新帐套.dbb 1>>fyr21.txt
set "a=0"
for /F "skip=4 delims=" %b in ('dir/tc "E:\test_batch\F2010新帐套.dbb"') do (
set /a "a+=1"
if !a! EQU 1 (
set "var=%b"
for /F "tokens=1 delims= " %c in ("!var!") do set "str=%c"
echo !str! 1>>fyr22.txt
if !str! LSS !rq! del /q "E:\test_batch\F2010新帐套.dbb"
)
)
)
找不到文件

E:\>(
echo F查询帐套.bak 1>>fyr21.txt
set "a=0"
for /F "skip=4 delims=" %b in ('dir/tc "E:\test_batch\F查询帐套.bak"') do (
set /a "a+=1"
if !a! EQU 1 (
set "var=%b"
for /F "tokens=1 delims= " %c in ("!var!") do set "str=%c"
echo !str! 1>>fyr22.txt
if !str! LSS !rq! del /q "E:\test_batch\F查询帐套.bak"
)
)
)
找不到文件

E:\>(
echo F查询帐套.dbb 1>>fyr21.txt
set "a=0"
for /F "skip=4 delims=" %b in ('dir/tc "E:\test_batch\F查询帐套.dbb"') do (
set /a "a+=1"
if !a! EQU 1 (
set "var=%b"
for /F "tokens=1 delims= " %c in ("!var!") do set "str=%c"
echo !str! 1>>fyr22.txt
if !str! LSS !rq! del /q "E:\test_batch\F查询帐套.dbb"
)
)
)
找不到文件

E:\>del/q tmptmp.vbs










还是不行~
作者: fyr000000    时间: 2012-5-16 09:06

回复 9# fyr000000


    这个是我的三个要删除的文件!!
作者: fyr000000    时间: 2012-5-16 09:22

我试了一下,单独一个中文名字可以删除的,一个英文+中文也是可以删除的,就是有几个就删除不了了
作者: fyr000000    时间: 2012-5-16 15:23

高手,人呢?
作者: fyr000000    时间: 2012-5-17 06:31

回复 8# gawk

高手,帮忙看一下
作者: fyr000000    时间: 2012-5-18 12:07

我换了另外一台xp和2003的电脑跑这个代码没问题,真是奇怪




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