|  | 
 
| kcdsw 中级用户
 
    
 
 
 
 积分 404
 发帖 179
 注册 2006-3-30
 状态 离线
 | 
| 『楼 主』:
 判断奇偶数
 
使用 LLM 解释/回答一下 
 
 
呵呵  工作需要哇  
 我想用一个批处理来判断一个数值是奇数偶数.
 这个数值是用
 for /f 从一个txt文件中提取的,我的目标是如果是偶数,那么把这个数值减1,如果是奇数,把这个数值加1.
 
 
 
 
 |  | 
|  2006-3-31 11:56 |  | 
|  | 
 
| chenall 银牌会员
 
      
 
 
 积分 1276
 发帖 469
 注册 2002-12-23
 来自 福建泉州
 状态 离线
 |  | 
|  2006-3-31 12:15 |  | 
|  | 
 
| 3742668 荣誉版主
 
        
 
 
 
 积分 2013
 发帖 718
 注册 2006-2-18
 状态 离线
 | 
| 『第 3 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
也来一个 :number
 set num=
 set /a num = %1 %% 2
 goto %num%
 
 :1
 set /a ret = %1 + 1
 goto :eof
 
 :0
 set /a ret = %1 - 1
 goto :eof
 
 
拷贝到你的批处理中,调用格式为: 
call :number %数值% 
echo %ret%
 
 
 
 |  | 
|  2006-3-31 12:24 |  | 
|  | 
 
| chenall 银牌会员
 
      
 
 
 积分 1276
 发帖 469
 注册 2002-12-23
 来自 福建泉州
 状态 离线
 |  | 
|  2006-3-31 12:46 |  | 
|  | 
 
| 3742668 荣誉版主
 
        
 
 
 
 积分 2013
 发帖 718
 注册 2006-2-18
 状态 离线
 | 
| 『第 5 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
过奖了,效率还过得去吧。不过对于大于32位的数字无效,所以写了个加强版,没加纠错。 :number
 set ret=
 set num=
 set num=%1
 set tmp1=%num:~-1,1%
 set /a flag = %tmp1% %% 2
 goto %flag%
 
 :1
 set /a last = %num:~-1,1% + 1
 set ret=%num:~0,-1%%last%
 goto :eof
 
 :0
 set /a last = %num:~-1,1% - 1
 set ret=%num:~0,-1%%last%
 goto :eof
 
 
 
 
 |  | 
|  2006-3-31 18:01 |  | 
|  | 
 
| kcdsw 中级用户
 
    
 
 
 
 积分 404
 发帖 179
 注册 2006-3-30
 状态 离线
 | 
| 『第 6 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
for /f "tokens=*" %%a in (a.txt) do (           //从a.txt中提取需要复制的文档call :number %%a                                //执行number的奇偶判断
 copy %%a.pdf f:\new
 copy %a%.pdf f:\new
 )
 :number
 set num=
 set /a num = %1 %% 2                             //这里我不太明白
 goto %num%
 
 :1
 set /a ret = %1 + 1
 goto :eof
 
 :0
 set /a ret = %1 - 1
 goto :eof
 
 能帮我看看吗?
 我需要把个别的文件挑出来复制出去,并要保证原文件夹里没有冗余
 我把需要的数据放在a.txt中,用for语句提取
 
 我的系统环境是xp sp2
 大家帮我看看吧    小弟在此谢谢大家了
 我很喜欢bat的  只是学的太不精了
 
 
 
 
 |  | 
|  2006-3-31 18:21 |  | 
|  | 
 
| kcdsw 中级用户
 
    
 
 
 
 积分 404
 发帖 179
 注册 2006-3-30
 状态 离线
 | 
| 『第 7 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
需要补充的就是如果这个文件是偶数文件,那就把它和比它小一数的文件拷过去如果文件是奇数,那么把它本身和它大1的的文件也复制过去
 
 
 
 
 |  | 
|  2006-3-31 18:27 |  | 
|  | 
 
| kcdsw 中级用户
 
    
 
 
 
 积分 404
 发帖 179
 注册 2006-3-30
 状态 离线
 | 
| 『第 8 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
我刚才测试  不管怎么测试  %%a取的数据不能被传递到number中 for /f "tokens=*" %%a in (a.txt) do (  set c=%%a
 call :number %c%
 copy %%a.pdf f:\new
 )
 :number
 set ret=
 set num=
 set num=%1
 echo %num%
 set tmp1=%num:~-1,1%
 echo %tmp1%
 set /a flag = %tmp1% %% 2
 echo %flag%
 goto %flag%
 
 :1
 set /a last = %num:~-1,1% + 1
 echo %last%
 set ret=%num:~0,-1%%last%
 echo %ret%
 copy %ret%.pdf f:\new
 goto :eof
 
 :0
 set /a last = %num:~-1,1% - 1
 echo %last%
 set ret=%num:~0,-1%%last%
 echo %ret%
 copy %ret%.pdf f:\new
 goto :eof
 
 
 Last edited by kcdsw on 2006-3-31 at 19:16 ]
 
 
 
 |  | 
|  2006-3-31 18:47 |  | 
|  | 
 
| 3742668 荣誉版主
 
        
 
 
 
 积分 2013
 发帖 718
 注册 2006-2-18
 状态 离线
 | 
| 『第 9 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
set /a num = %1 %% 2 这句是求余数。 
%%a的数据是不会变的,要获得运算后的数字需要用%ret%。。。 
根据你的要求更改如下:
 for /f "tokens=*" %%a in (a.txt) do call :number %%a
 exit
 
 :number
 set /a flag = %1 %% 2
 goto %flag%
 
 :1
 set /a filename = %1 + 1
 goto copy
 
 :0
 set /a filename = %1 - 1
 
 :copy
 copy %1.pdf f:\new\%1.pdf
 copy %filename%.pdf f:\new\%filename%.pdf
 goto :eof
 
 
你看看能不能执行。。记得拷贝到a.txt所在的目录下。。
 
 Last edited by 3742668 on 2006-3-31 at 19:25 ]
 
 
 
 |  | 
|  2006-3-31 19:17 |  | 
|  | 
 
| kcdsw 中级用户
 
    
 
 
 
 积分 404
 发帖 179
 注册 2006-3-30
 状态 离线
 |  | 
|  2006-3-31 19:21 |  | 
|  | 
 
| 3742668 荣誉版主
 
        
 
 
 
 积分 2013
 发帖 718
 注册 2006-2-18
 状态 离线
 |  | 
|  2006-3-31 19:27 |  | 
|  | 
 
| kcdsw 中级用户
 
    
 
 
 
 积分 404
 发帖 179
 注册 2006-3-30
 状态 离线
 | 
| 『第 12 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
呵呵  说真的  小弟真想拜倒了 强悍哇~~~ 
另外能帮我简化或者指正一下另外一个文件吗?
 echo. 2>nul 3>>error.txtFor /F "tokens=1" %%a in ('date/t') do @set list=%%a
 set Day=F:\print\%list%
 if exist %day% goto o
 Md %day%
 :o
 if %1#==#  goto A
 copy %1 %day%
 del %1 /q
 rd %1
 if %2#==#  goto B
 shift
 goto o
 :A
 EXPLORER %DAY%
 :B
 EXIT
 
目的: 
我在桌面上建立一个指向此bat的一个快捷方式
 
1.不论什么时候执行,首先检测当日的文件夹是否建立 
2.如果建立,检测是否有需要移动的文件,如果没有则用浏览器打开这个目录(即双击就能打开当天文件夹,以便查看有什么文件),如果有,则将该文件移动到当天的文件夹里.(我把此快捷方式放到了系统的send to文件夹中,遇到想移动的文件,直接用右键发送到)
 
 Last edited by kcdsw on 2006-3-31 at 19:35 ]
 
 
 
 |  | 
|  2006-3-31 19:30 |  | 
|  | 
 
| 3742668 荣誉版主
 
        
 
 
 
 积分 2013
 发帖 718
 注册 2006-2-18
 状态 离线
 | 
| 『第 13 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
sorry,现在有事,提供思路:1.获得当前日期可以用%date:~0,10%来得到,所以你的第二,三句可以合并为一句。
 2.用xcopy拷贝文件不管目录是否存在都可以创建。用move移动文件就可以省略掉del命令了。
 3.个人认为把这个批处理拷贝到“发送到”一次只能处理一个文件,可以考虑修改注册表。例如我以前写过一个批处理用来查看当前文件被哪个程序使用而导致无法删除,我的注册表脚本(reg文件)为:
 Windows Registry Editor Version 5.00
 
 [HKEY_CLASSES_ROOT\*\shell]
 
 [HKEY_CLASSES_ROOT\*\shell\谁在使用它?]
 
 [HKEY_CLASSES_ROOT\*\shell\谁在使用它?\command]
 @="c:\\cxs.bat %1"
 
 注意路径中的   \
 你先自己修改了看看吧,然后把你修改过的贴上来让大家帮你再参考参考。
 
 
 
 
 |  | 
|  2006-3-31 20:21 |  | 
|  | 
 
| kcdsw 中级用户
 
    
 
 
 
 积分 404
 发帖 179
 注册 2006-3-30
 状态 离线
 | 
| 『第 14 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
可以处理多个文加啊   
move的时候出过错,后来没细想 直接换成copy+del了 
xcopy
 For /F "tokens=1" %%a in ('date/t') do @set Day=F:\print\%%aif not exist %day% Md %day%
 :o
 if %1#==#  goto A
 xcopy /s /c /y %1 %day%
 del /q %1
 rd /s /q %1
 if %2#==#  goto B
 shift
 goto o
 :A
 EXPLORER %DAY%
 :B
 exit
 
这样的话如果是把一个文件夹交给它的话   
结果文件夹本身没有复制过去,复制过去的只有它里面的文件和文件夹 
怎么才能把这个原文件夹也弄过去? 
或者最简单的用来分辨这个%1是文件还是文件夹?
 
 Last edited by kcdsw on 2006-4-1 at 08:05 ]
 
 
 
 |  | 
|  2006-4-1 07:35 |  | 
|  | 
 
| 3742668 荣誉版主
 
        
 
 
 
 积分 2013
 发帖 718
 注册 2006-2-18
 状态 离线
 | 
| 『第 15 楼』:
 
 
使用 LLM 解释/回答一下 
 
 
早睡早起身体好,试着简单改了一下: (for %%i in (%*) do xcopy %%i f:\print\%date:~0,10%\ && del %%i) || explorer f:\print\%date:~0,10%
 
 
如果没有要复制的文件则会打开当天的目录,如果当天的目录不存在则会提示目录不存在;如果有要复制的文件就会移动文件到当天的目录中,如果当天的目录不存在则会自动创建;如果你想实现没有要拷贝的文件且当天的目录不存在时候自动建立目录的话可以考虑在explorer后面接语句“|| md f:\print\%date:~0,10%”。 
至于注册表脚本,虽然可以多选但是也有弊病,就是对文件路径中包含空格的情况需要自己在批处理中判定并处理。
 
 
 
 |  | 
|  2006-4-1 07:43 |  |