标题: [文件操作] [已解决]批处理中传递变量遇到问题,请指点为盼 [打印本页]
作者: angelbd 时间: 2014-11-19 09:44 标题: [已解决]批处理中传递变量遇到问题,请指点为盼
本帖最后由 angelbd 于 2014-11-20 19:45 编辑
请教一下,我想实现通过批处理自动确认可移动磁盘(U盘)的盘符,然后判断其是否存在jobs文件夹,有就执行一命令,没有的话就创建该文件夹并执行一命令。我遇到的问题是已经取得正确的可移动磁盘的盘符,却不能传递其值给后面的语句,不能实现预期目的。我的批处理内容如下:
@echo off
cls
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do fsutil fsinfo drivetype %%i: | find "可移动">nul
set var=%%i:
if not exist (%var%\jobs) (md %var%\jobs)
del %var%\jobs\*.* /q>nul
copy D:\经纬软件\经纬标签打印系统\PrintLable\jobs %var%\jobs /y >nul
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q >nul
请高手们热心帮忙指点一下为盼。谢谢了!
作者: DAIC 时间: 2014-11-19 10:45
set var=%%i: 这个用法是错误的,%%i只能在for循环内部使用。
参考一下别人的脚本吧:
http://bbs.bathome.net/thread-3569-1-1.html
作者: amwfjhh 时间: 2014-11-19 11:01
do 后方功能语句应为一语句块,即你须将相关功能用()括起来或者用&连起来,同时,如果你要在语句块内调用实时变量取值,还需开启延时变量,并将变量引用由%%改为!!
作者: amwfjhh 时间: 2014-11-19 11:06
仅对语法部分作更改。- @echo off
- cls
- setlocal enabledelayedexpansion
- for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
- fsutil fsinfo drivetype %%i: | find "可移动">nul && (
- set var=%%i:
- if not exist (!var!\jobs) (md !var!\jobs)
- del !var!\jobs\*.* /q>nul
- copy D:\经纬软件\经纬标签打印系统\PrintLable\jobs !var!\jobs /y >nul
- del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q >nul
- )
- )
- pause>nul
复制代码
作者: angelbd 时间: 2014-11-19 12:39
回复 4# amwfjhh
谢谢指教
作者: angelbd 时间: 2014-11-19 13:15
回复 4# amwfjhh
试了下还是不行,没有达到预期目的。还请继续帮忙指点
作者: amwfjhh 时间: 2014-11-19 13:28
你预期的目的是什么?把文件夹下的东西全部拷过去?那你不应该用copy,而是xcopy,具体用法看下帮助吧。还有,仅本例而言,其实完全用不着中间set个变量的,直接对%%i进行路径组装就行了。
作者: angelbd 时间: 2014-11-19 15:23
回复 7# amwfjhh
我想实现,自动判断插入的U盘盘符,并判断其根目录下有无jobs文件夹,有则先清空该文件夹;若没有该文件夹,则创建该文件夹。在此基础上再复制硬盘上指定文件夹中的文件到U盘下的jobs文件夹下。
作者: angelbd 时间: 2014-11-19 15:33
@echo off
cls
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
fsutil fsinfo drivetype %%i: | find "可移动">nul && (
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs %%i:\jobs /s /q >nul
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q >nul
)
) 这段如果能正确执行也能实现
作者: amwfjhh 时间: 2014-11-19 17:57
用XCOPY /E /Q ... ...试试。
作者: angelbd 时间: 2014-11-19 20:36
回复 10# amwfjhh
还是不行,不能在U盘建立文件夹
作者: amwfjhh 时间: 2014-11-19 20:40
你没建文件夹啊
作者: angelbd 时间: 2014-11-19 21:56
回复 12# amwfjhh
实现目的:自动判断插入的U盘盘符,并判断其根目录下有无jobs文件夹,有则先清空该文件夹;若没有该文件夹,则创建该文件夹。在此基础上再复制硬盘上指定文件夹中的文件到U盘下的jobs文件夹下。
作者: amwfjhh 时间: 2014-11-19 22:19
我的意思是,你最后的那个代码,把创建文件夹那步删掉了,所以不成功。
作者: apang 时间: 2014-11-19 22:24
回复 9# angelbd
%%i:\jobs 后面加个斜杠,必需的:%%i:\jobs\
作者: angelbd 时间: 2014-11-20 08:07
回复 15# apang
具体指哪个,都需要加上?
作者: angelbd 时间: 2014-11-20 08:17
@echo off
cls
for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
fsutil fsinfo drivetype %%i: | find "可移动" >nul && (
if not exist (%%i:\jobs) (md %%i:\jobs)
del %%i:\jobs\*.* /q>nul
copy D:\经纬软件\经纬标签打印系统\PrintLable\jobs %%i:\jobs /y >nul
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q >nul
)
) 请高手帮忙指点或修改这段语句中的错误吧,这是最符合我本意的,谢谢
作者: DAIC 时间: 2014-11-20 08:29
回复 17# angelbd
请详细说说这段代码的执行结果和你的实际需求有哪些差别?我可以帮你改
作者: angelbd 时间: 2014-11-20 08:52
回复 18# DAIC
首先谢谢你的帮助。我这个批处理想实现自动查找U盘并确认其盘符,然后判断其根目录下有无jobs这个文件夹,如果有就清空该目录中的所有文件,如果还没有就先创建jobs目录,然后就是将硬盘指定目录下的文件复制到U盘jobs目录中,最后再清空硬盘指定目录下的文件。谢谢你百忙之中热心帮忙。
作者: DAIC 时间: 2014-11-20 09:00
回复 19# angelbd
请详细说说这段代码的执行结果和你的实际需求有哪些差别?我可以帮你改
作者: angelbd 时间: 2014-11-20 09:33
回复 20# DAIC
貌似连U盘盘符取值这步都没有成功,无论有无jobs目录,更没有实现目录创建,后续的复制文件也无从谈起了
作者: angelbd 时间: 2014-11-20 09:35
回复 20# DAIC
if not exist (%%i:\jobs) (md %%i:\jobs)
del %%i:\jobs\*.* /q>nul
copy D:\经纬软件\经纬标签打印系统\PrintLable\jobs %%i:\jobs /y >nul
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q >nul
这些都没执行,或者没取得正确结果
作者: DAIC 时间: 2014-11-20 13:34
回复 21# angelbd
把 @echo off 删掉
把所有的 >nul 删掉
代码保存为 C:\test.bat
打开一个 CMD 窗口,执行命令:
C:\test.bat
把结果发出来看看
作者: apang 时间: 2014-11-20 17:09
本帖最后由 apang 于 2014-11-20 17:11 编辑
if not exist (%%i:\jobs) (md %%i:\jobs)
这种语法是错误的,应该用双引号而不是用括弧包围
if not exist "%%i:\jobs\" (md %%i:\jobs)
作者: apang 时间: 2014-11-20 18:02
- @echo off
- set "srcFolder=D:\经纬软件\经纬标签打印系统\PrintLable\jobs"
- if not exist "%srcFolder%\" exit/b
-
- (for %%i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (
- fsutil fsinfo drivetype %%i:|findstr /i "Removable 可移动" && (
- rd /s /q "%%i:\jobs"
- xcopy "%srcFolder%\*" "%%i:\jobs\" /e /h /c
- set "flag=1"
- )
- ))>nul 2>nul
-
- if defined flag echo rd /s /q "%srcFolder%"
- pause
复制代码
作者: angelbd 时间: 2014-11-20 19:25
本帖最后由 angelbd 于 2014-11-20 19:27 编辑
C:\Documents and Settings\Administrator>for %i in (c d e f g h i j k l m n o p q r s t u v w x y z) do (fsutil fsinfo drivetype %i: | find "可移动" && (
if not exist "%i:\jobs\" (md %i:\jobs )
del %i:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs %i:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype c: | find "可移动" && (
if not exist "c:\jobs\" (md c:\jobs )
del c:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs c:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype d: | find "可移动" && (
if not exist "d:\jobs\" (md d:\jobs )
del d:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs d:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype e: | find "可移动" && (
if not exist "e:\jobs\" (md e:\jobs )
del e:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs e:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype f: | find "可移动" && (
if not exist "f:\jobs\" (md f:\jobs )
del f:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs f:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype g: | find "可移动" && (
if not exist "g:\jobs\" (md g:\jobs )
del g:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs g:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype h: | find "可移动" && (
if not exist "h:\jobs\" (md h:\jobs )
del h:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs h:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype i: | find "可移动" && (
if not exist "i:\jobs\" (md i:\jobs )
del i:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs i:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype j: | find "可移动" && (
if not exist "j:\jobs\" (md j:\jobs )
del j:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs j:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype k: | find "可移动" && (
if not exist "k:\jobs\" (md k:\jobs )
del k:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs k:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype l: | find "可移动" && (
if not exist "l:\jobs\" (md l:\jobs )
del l:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs l:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype m: | find "可移动" && (
if not exist "m:\jobs\" (md m:\jobs )
del m:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs m:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype n: | find "可移动" && (
if not exist "n:\jobs\" (md n:\jobs )
del n:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs n:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype o: | find "可移动" && (
if not exist "o:\jobs\" (md o:\jobs )
del o:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs o:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype p: | find "可移动" && (
if not exist "p:\jobs\" (md p:\jobs )
del p:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs p:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype q: | find "可移动" && (
if not exist "q:\jobs\" (md q:\jobs )
del q:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs q:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype r: | find "可移动" && (
if not exist "r:\jobs\" (md r:\jobs )
del r:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs r:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype s: | find "可移动" && (
if not exist "s:\jobs\" (md s:\jobs )
del s:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs s:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype t: | find "可移动" && (
if not exist "t:\jobs\" (md t:\jobs )
del t:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs t:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype u: | find "可移动" && (
if not exist "u:\jobs\" (md u:\jobs )
del u:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs u:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype v: | find "可移动" && (
if not exist "v:\jobs\" (md v:\jobs )
del v:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs v:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype w: | find "可移动" && (
if not exist "w:\jobs\" (md w:\jobs )
del w:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs w:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype x: | find "可移动" && (
if not exist "x:\jobs\" (md x:\jobs )
del x:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs x:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype y: | find "可移动" && (
if not exist "y:\jobs\" (md y:\jobs )
del y:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs y:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
C:\Documents and Settings\Administrator>(fsutil fsinfo drivetype z: | find "可移动" && (
if not exist "z:\jobs\" (md z:\jobs )
del z:\jobs\*.* /q
xcopy D:\经纬软件\经纬标签打印系统\PrintLable\jobs z:\jobs /e /q
del D:\经纬软件\经纬标签打印系统\PrintLable\jobs\*.* /q
) )
=======================================
结果是所有磁盘盘符都执行了一遍,而不是只是对可移动U盘操作。这与我的本意是不相符的
作者: angelbd 时间: 2014-11-20 19:41
回复 25# apang
谢谢,你的方案已经验证正确,问题完美解决。谢谢众位热心人士。
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |