标题: [其他] [已解决]bat中如何转义并实现如下代码 [打印本页]
作者: shootman2 时间: 2015-3-28 23:05 标题: [已解决]bat中如何转义并实现如下代码
本帖最后由 shootman2 于 2015-3-31 15:21 编辑
@echo off
setlocal enabledelayedexpansion
set deploy_cmd_file=d:\appDeploy.txt
echo off>"%deploy_cmd_file%"
set fileList=d:\WebContent_20150328.zip
set fileName=WebContent_20150328.zip
for %%x in ("cd /home/weblogic/bea" "put "^"%fileList%^" "^"%fileName%^"" "exit") do echo %%~x>>"%deploy_cmd_file%" 这段代码调试有问题
我想实现最后写入到文件中的内容是这样的
cd /home/weblogic/bea
put "d:\WebContent_20150328.zip" "WebContent_20150328.zip" 要加上双引号
exit
这具体该怎么实现呢?求大神帮助!!!
作者: bailong360 时间: 2015-3-28 23:26
本帖最后由 bailong360 于 2015-3-29 08:44 编辑
回复 4# shootman2
- @echo off
- setlocal enabledelayedexpansion
- set deploy_cmd_file=d:\appDeploy.txt
- set fileList=d:\WebContent_20150328.zip
- set fileName=WebContent_20150328.zip
- for %%x in ("cd /home/weblogic/bea" "put "%%fileList%%" "%%fileName%%"" "exit"
- ) do call echo %%~x>>"%deploy_cmd_file%"
bailong360发表于: 2015-03-29 08:42
符合要求否?
奇怪,用[code]发出去总是挤在一行上面...难道是编辑器问题??
作者: shootman2 时间: 2015-3-28 23:38
回复 2# bailong360
good job!very thank you!!!
作者: shootman2 时间: 2015-3-29 00:11
回复 bailong360
good job!very thank you!!!
shootman2 发表于 2015-3-28 23:38
好像还不对哦!关键的那个for循环,只能写成这样
for %%x in (
***
***
) do ****
写成是 for %%x in (*** ***) do *** 就报错了!
而且就即便是写成了大神你所说的这种的话,一旦路径中带有空格,就自动转成是换行了!
麻烦大神再给帮忙看看!
作者: shootman2 时间: 2015-3-29 12:05
回复 2# bailong360
大神,你写的代码太好了!我又学到一招。可是实际在我的代码中,还有这么点缺陷。
其实我的代码中,让你帮忙写的这段只是其中的一部分,它的外层还有一层for循环。功能必须启用变量延迟,
所以当按照你的代码修改后,还是有问题,我现在就把完整的代码发给你,麻烦你再帮我改改。先谢谢了!
@echo off
setlocal enabledelayedexpansion
for /l %%a in (1 1 100) do (
set deploy_cmd_file=d:\appDeploy_%%a.txt
set fileList=d:\WebContent_201503 28_%%a.zip
set fileName=WebContent_20150328_%%a.zip
for %%x in ("cd /home/weblogic/bea" "put "!!fileList%!!" "!!fileName%!!"" "exit") do call echo %%~x>>"%deploy_cmd_file%"
)
pause
作者: bailong360 时间: 2015-3-29 12:07
回复 5# shootman2
这个地方不需要变量延迟
- @echo off
- for /l %%a in (1 1 100) do (
- set deploy_cmd_file=d:\appDeploy_%%a.txt
- set fileList=d:\WebContent_201503 28_%%a.zip
- set fileName=WebContent_20150328_%%a.zip
- for %%x in ("cd /home/weblogic/bea" "put "%%fileList%%" "%%fileName%%"" "exit") do call echo %%~x>>"%deploy_cmd_file%"
- )
- pause
bailong360发表于: 2015-03-29 12:08
作者: shootman2 时间: 2015-3-29 12:19
回复 6# bailong360
打印还是有问题,必须要用到变量延迟。
rem setlocal enabledelayedexpansion
for /f "usebackq eol=# tokens=1-14 delims=|" %%a in ("%host_list_file%") do (
set fileList=
set fileName=
set /a filesCnt=0
for /f "delims=" %%x in ('dir /a /b /s "%deploy_app_folder%\*.zip"') do set fileList=%%x&set fileName=%%~nxx&set /a filesCnt+=1
if !filesCnt! equ 0 (
echo 没有应用可以发布
) else if !filesCnt! equ 1 (
echo off>"%deploy_cmd_file%"
for %%x in ("cd %%g" "put "%%fileList%%" "%%fileName%%"" "exit") do echo %%~x>>"%deploy_cmd_file%"
psftp %%c -l %%d -pw %%e<"%deploy_cmd_file%"
plink -l %%d -pw %%e %%d@%%c "unzip !fileName!;A"
echo 主机 %%a.%%b 上的服务 %%f 的应用已经发布
) else if !filesCnt! gtr 1 (
echo 应用程序包有多个,不知道该发布哪个
)
)
echo 按任意键退出
pause>nul
作者: bailong360 时间: 2015-3-29 12:28
本帖最后由 bailong360 于 2015-3-29 18:50 编辑
- @echo off
- setlocal enabledelayedexpansion
- for /f "usebackq eol=# tokens=1-14 delims=|" %%1 in ("%host_list_file%") do (
- set fileList=
- set fileName=
- set /a filesCnt=0
- for /f "delims=" %%x in ('dir /a /b /s "%deploy_app_folder%\*.zip"') do set fileList=%%x&set fileName=%%~nxx&set /a filesCnt+=1
- if !filesCnt! equ 0 (
- echo 没有应用可以发布
- ) else if !filesCnt! equ 1 (
- echo off>"%deploy_cmd_file%"
- for %%x in ("cd %%g" "put "%%fileList%%" "%%fileName%%"" "exit") do echo %%~x>>"%deploy_cmd_file%"
- psftp %%3 -l %%4 -pw %%5<"%deploy_cmd_file%"
- plink -l %%4 -pw %%5 %%d@%%3 "unzip !fileName!;A"
- echo 主机 %%1.%%2 上的服务 %%6 的应用已经发布
- ) else if !filesCnt! gtr 1 (
- echo 应用程序包有多个,不知道该发布哪个
- )
- )
- echo 按任意键退出
- pause>nul
复制代码
作者: shootman2 时间: 2015-3-29 12:41
回复 8# bailong360
还是不行的,最外层的语句 for /f "usebackq eol=# tokens=1-14 delims=|" %%a in ("%host_list_file%") do ( 中,有tokens=1-14,也就是说
有%%a,%%b,%%c,%%d,%%e,%%f,%%g,%%h,%%i,%%j,%%k,%%l,%%m,%%n
这一句中 for %%x in ("cd %%g" "put "%%fileList%%" "%%fileName%%"" "exit") do echo %%~x>>"%deploy_cmd_file%" %%fileList被系统当做 %%f +ilelist处理了!
作者: 523066680 时间: 2015-3-29 12:54
回复 8# bailong360
论坛也该内部支持一下彩色代码了,给论坛放个模块的事儿
作者: bailong360 时间: 2015-3-29 13:43
回复 9# shootman2
可以把那个%%a改成%%1,或者%%A
作者: bailong360 时间: 2015-3-29 13:44
回复 10# 523066680
那样似乎十分有趣~并且实用
作者: shootman2 时间: 2015-3-29 18:21
回复 12# bailong360
大神,请继续帮助!
作者: pcl_test 时间: 2015-3-29 19:29
回复 13# shootman2
把你的完整代码发下,发现你发出的三段代码都不完整,不好整合
作者: CrLf 时间: 2015-3-29 20:01
回复 2# bailong360
什么浏览器,发一个试试,我看下是怎么回事
作者: bailong360 时间: 2015-3-29 20:06
本帖最后由 bailong360 于 2015-3-29 20:07 编辑
回复 15# CrLf
解决了,Win8.1 32位 Chrome36下用所见即所得模式发的贴会这样
- @Echo OffSetLocal EnableDelayedExpansionFor /L %%i In (1 1 100) Do Echo Test%%iExit
复制代码
PS 这样...
作者: CrLf 时间: 2015-3-29 21:37
回复 16# bailong360
64位 win7,chrome v36,所见即所得测试结果正常:
- @Echo Off
- SetLocal EnableDelayedExpansion
- For /L %%i In (1 1 100) Do Echo Test%%i
- Exit
复制代码
作者: bailong360 时间: 2015-3-29 21:49
回复 17# CrLf
看来真是我的电脑问题
作者: shootman2 时间: 2015-3-29 23:52
回复 14# pcl_test
setlocal enabledelayedexpansion
for /f "usebackq eol=# tokens=1-14 delims=|" %%a in ("%host_list_file%") do (
set fileList=
set fileName=
set /a filesCnt=0
for /f "delims=" %%x in ('dir /a /b /s "%deploy_app_folder%\*.zip"') do set fileList=%%x&set fileName=%%~nxx&set /a filesCnt+=1
if !filesCnt! equ 0 (
echo 没有应用可以发布
) else if !filesCnt! equ 1 (
echo off>"%deploy_cmd_file%"
for %%x in ("cd %%g" "put "%%fileList%%" "%%fileName%%"" "exit") do echo %%~x>>"%deploy_cmd_file%"
echo psftp %%c -l %%d -pw %%e<"%deploy_cmd_file%"
echo plink -l %%d -pw %%e %%d@%%c "unzip !fileName!;A"
echo 主机 %%a.%%b 上的服务 %%f 的应用已经发布
) else if !filesCnt! gtr 1 (
echo 应用程序包有多个,不知道该发布哪个
)
)
echo 按任意键退出
pause>nul
作者: pcl_test 时间: 2015-3-30 10:03
本帖最后由 pcl_test 于 2015-3-30 10:08 编辑
回复 19# shootman2 - @echo off
- setlocal enabledelayedexpansion
- ::未见初始化host_list_file、deploy_app_folder、deploy_cmd_file,代码缺失?
- for /f "usebackq eol=# tokens=1-14 delims=|" %%a in ("%host_list_file%") do (
- set fileList=
- set fileName=
- set /a filesCnt=0
- for /f "delims=" %%x in ('dir /a /b /s "%deploy_app_folder%\*.zip"') do set fileList=%%x&set fileName=%%~nxx&set /a filesCnt+=1
- if !filesCnt! equ 0 (
- echo 没有应用可以发布
- ) else if !filesCnt! equ 1 (
- (
- echo,cd /d %%g
- echo,put "!fileList!" "!fileName!"
- echo,exit
- )>"%deploy_cmd_file%"
- echo psftp %%c -l %%d -pw %%e<"%deploy_cmd_file%"
- echo plink -l %%d -pw %%e %%d@%%c "unzip !fileName!;A"
- echo 主机 %%a.%%b 上的服务 %%f 的应用已经发布
- ) else if !filesCnt! gtr 1 (
- echo 应用程序包有多个,不知道该发布哪个
- )
- )
- echo 按任意键退出
- pause>nul
复制代码
作者: shootman2 时间: 2015-3-31 15:20
回复 20# pcl_test
ok!问题得解!
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |