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

[文件操作] 为什么这段批处理代码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

为什么我跑这个批处理
目录里面有中文的
它就会报找不到文件阿
怎么解决问题阿

把@echo off&删掉,检查一下是哪一行代码在报错,把报错信息贴出来。

TOP

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
请按任意键继续 . . .

TOP

E:\test_batch\F2010新帐套_2012-05-111201.dbb这个文件存在吗?
如果把这个文件名中的“新帐套”删掉就不会报错吗?

TOP

对的,好像没有中文就不会报错,还有那个批处理我是在win2000服务器上跑的

TOP

文件都是有的

TOP

而且我把del显示出来的代码,贴到dos命令里面也是能删除的,真是奇怪

TOP

回复 7# fyr000000


代码第二行加一句:
chcp 936
这样有效果没?

TOP

回复 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










还是不行~

TOP

回复 9# fyr000000


    这个是我的三个要删除的文件!!

TOP

我试了一下,单独一个中文名字可以删除的,一个英文+中文也是可以删除的,就是有几个就删除不了了

TOP

高手,人呢?

TOP

回复 8# gawk

高手,帮忙看一下

TOP

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

TOP

返回列表