Board logo

标题: [文本处理] 自动创建批处理文件怎么写? [打印本页]

作者: 雨夜秋风    时间: 2010-5-26 13:52     标题: 自动创建批处理文件怎么写?

我想写一个打开一个BAT文件运行后自动创建BAT文件在本目录下并打开自身
创建的BAT文件里的内容自定。比如我预设要写入abcb,创建的BAT文件里的内容也是abcd
作者: hanyeguxing    时间: 2010-5-26 14:32

示例:
1,从此批处理程序调用新创建批处理程序,并且不终止父批处理程序,运行完成后删除新创建的批处理程序
  1. @echo off
  2. more +5<"%~fs0">"%~n0_.bat"
  3. call "%~n0_.bat" "要传递的参数"
  4. del "%~n0_.bat"
  5. pause&exit
  6. ::下面为新创建批处理程序的代码:
  7. @echo off
  8. echo.%~1
  9. ping -n 10 127.1>nul
复制代码
2,从此批处理程序调用新创建批处理程序,并且删除父批处理程序:
  1. @echo off
  2. more +5<"%~fs0">"%~n0_.bat"
  3. start "" "%~n0_.bat"
  4. del "%~fs0"
  5. exit
  6. ::下面为新创建批处理程序的代码:
  7. @echo off
  8. echo.正在新批处理中
  9. ping -n 10 127.1>nul
  10. exit
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-26 14:47 编辑 ]
作者: 雨夜秋风    时间: 2010-5-26 16:01     标题: 回复 2楼 的帖子

@echo off&setlocal enabledelayedexpansion
for /f "tokens=3* delims=," %%a in ('WMIC Path Win32_LogicalDisk Get

Description^,DeviceID^,FileSystem /format:csv^|find "可移动磁盘"') do (
set a=%%a
more +5<"%~fs0">"!a:~0,1!.bat"
call "!a:~0,1!.bat" "正在运行中"
del "!a:~0,1!.bat"
pause&exit
@echo off
format "!a:~0,1!.BAT"/fs:fat32/y)
pausep
我这样写怎么创建不了bat文件的呢?帮忙解决一下。谢了!
作者: hanyeguxing    时间: 2010-5-26 16:20

为什么不能写成这样呢?
  1. @echo off
  2. for /f "skip=1" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID') do format %%a /q /x /fs:fat32
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-26 21:07 编辑 ]
作者: 雨夜秋风    时间: 2010-5-26 17:56     标题: 回复 4楼 的帖子

我在学嘛!要自己想怎样运行就怎样动才有成就感的呀
帮忙写一个出来的哦。谢了!
作者: hanyeguxing    时间: 2010-5-26 19:53

非得这么写?
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "skip=1" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID') do (
  3. set a=%%a
  4. set a=!a:~0,1!.bat
  5. more +9<"%~fs0">!a!
  6. call !a! "%%a"
  7. del !a!
  8. )
  9. pause&exit
  10. @echo off
  11. echo.正在格式化 %1 中...
  12. format %~1 /fs:fat32 /y
复制代码
或:
  1. @echo off
  2. more +5<"%~fs0">$tmp$.bat
  3. for /f "skip=1" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID') do call "$tmp$.bat" "%%a"
  4. del "$tmp$.bat"
  5. pause&exit
  6. @echo off
  7. echo.正在格式化 %1 中...
  8. format %~1 /fs:fat32 /y
复制代码

[ 本帖最后由 hanyeguxing 于 2010-5-26 21:07 编辑 ]
作者: 雨夜秋风    时间: 2010-5-27 08:58     标题: 已解决回复 6楼 的帖子

再次多谢寒夜兄帮我解决问题
我把它有一点点的改动了才是我最想要的东西@echo off&setlocal enabledelayedexpansion
for /f "skip=1" %%a in ('wmic logicaldisk where DriveType^=2 get

DeviceID') do (
set a=%%a
set a=!a:~0,1!.bat
more +9<"%~fs0">!a!
start !a! "%%a")
pause
@echo off
echo.正在格式化 %1 中...
format %~1 /fs:fat32/y && exit/y
我还有两个不懂的地方“format %~1”为什么不是”!a!“呢?还有我改动了之后
@echo off
echo.正在格式化 %1 中...这里怎么不起作用了呢?
作者: sgaizxt001    时间: 2010-5-27 09:16

不起作用的话可能是因为这个:
more +9<"%~fs0">!a!意思是把这个批处理第9行以后的代码写进a.bat你看看你的代码行数

format %~1 /fs:fat32/y && exit/y是在当前批处理运行a.bat,并把"%%a"作为参数传递给a.bat,所以format a写成format %~1,这里是去掉引号的%%a
作者: 雨夜秋风    时间: 2010-5-27 09:50     标题: 回复 8楼 的帖子

也就是说%%a=%~1, 是吗?是不是也可以写成format %%a/fs:fat32/y && exit/y呢?
作者: 雨夜秋风    时间: 2010-5-27 15:16     标题: 回复 6楼 的帖子

@echo off&setlocal enabledelayedexpansion
for /f "skip=1" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID') do (
set a=%%a
set a=!a:~0,1!.bat
more +8<"%~fs0">!a!
start !a! "%%a"
)
pause&exit
@echo off
echo.正在格式化 %1 中...
format %~1 /fs:fat32 /y
set a=!a:~0,1!.bat
if format=%% goto copy 123 !a!
del !a!
exit/y
我想在创建新的bat文件里加入format成功后就复制指定文件里的内空到本磁盘里然后再删除自身。帮忙解决一下。谢了!
作者: 雨夜秋风    时间: 2010-5-27 21:21

@echo off&setlocal enabledelayedexpansion
for /f "skip=1" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID') do (
set a=%%a
set a=!a:~0,1!.bat
more +8<"%~fs0">!a!
start !a! "%%a"
)
pause&exit
@echo off
echo.正在格式化 %~1 中...
format %~1 /fs:fat32/y
del %0
已解决删除自身。还有一个格式化不成功不复制文件到磁盘里
作者: sgaizxt001    时间: 2010-5-28 00:16     标题: 回复9楼

不可以写成format %%a,因为是这个批处理来运行a.bat,但是a.bat里没有定义%%a变量,需要给a.bat传递一个%%a的参数
作者: 雨夜秋风    时间: 2010-5-28 08:25     标题: 回复 12楼 的帖子

那怎么变成了”%~1“的了呢?
作者: sgaizxt001    时间: 2010-5-28 08:40

在传递参数的时候,写的是"%%a",start !a! "%%a",%~1是去掉了双引号变成format %%a /fs:fat32/y。你可以添加echo语句看看区别
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "skip=1" %%a in ('wmic logicaldisk where DriveType^=2 get DeviceID') do (
  3. set a=%%a
  4. set a=!a:~0,1!.bat
  5. more +8<"%~fs0">!a!
  6. start !a! "%%a"  & echo 原来的变量是:%%a
  7. )
  8. pause&exit
  9. @echo off
  10. echo.正在格式化 %~1 中...
  11. echo 传递的参数分别是:%1    %~1
  12. rem format %~1 /fs:fat32/y
  13. rem del %0
复制代码





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