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

[其他] [已解决]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-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]发出去总是挤在一行上面...难道是编辑器问题??
1

评分人数

TOP

回复 2# bailong360


    good job!very thank you!!!

TOP

回复  bailong360


    good job!very thank you!!!
shootman2 发表于 2015-3-28 23:38



    好像还不对哦!关键的那个for循环,只能写成这样
for %%x in (
***
***
) do ****
写成是 for %%x in (*** ***) do *** 就报错了!

而且就即便是写成了大神你所说的这种的话,一旦路径中带有空格,就自动转成是换行了!

麻烦大神再给帮忙看看!

TOP

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

TOP

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

TOP

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

TOP

本帖最后由 bailong360 于 2015-3-29 18:50 编辑
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "usebackq eol=# tokens=1-14 delims=|" %%1 in ("%host_list_file%") do (
  4.         set fileList=
  5.         set fileName=
  6.         set /a filesCnt=0
  7.         for /f "delims=" %%x in ('dir /a /b /s "%deploy_app_folder%\*.zip"') do set fileList=%%x&set fileName=%%~nxx&set /a filesCnt+=1
  8.         if !filesCnt! equ 0 (
  9.                 echo 没有应用可以发布
  10.         ) else if !filesCnt! equ 1 (
  11.                 echo off>"%deploy_cmd_file%"
  12.                 for %%x in ("cd %%g" "put "%%fileList%%" "%%fileName%%"" "exit") do echo %%~x>>"%deploy_cmd_file%"
  13.                 psftp %%3 -l %%4 -pw %%5<"%deploy_cmd_file%"
  14.                 plink -l %%4 -pw %%5 %%d@%%3 "unzip !fileName!;A"
  15.                 echo 主机 %%1.%%2 上的服务 %%6 的应用已经发布
  16.         ) else if !filesCnt! gtr 1 (
  17.                 echo 应用程序包有多个,不知道该发布哪个
  18.         )
  19. )
  20. echo 按任意键退出
  21. pause>nul
复制代码

TOP

回复 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处理了!

TOP

回复 8# bailong360


    论坛也该内部支持一下彩色代码了,给论坛放个模块的事儿

TOP

回复 9# shootman2


    可以把那个%%a改成%%1,或者%%A

TOP

回复 10# 523066680


    那样似乎十分有趣~并且实用

TOP

回复 12# bailong360


    大神,请继续帮助!

TOP

回复 13# shootman2

把你的完整代码发下,发现你发出的三段代码都不完整,不好整合

TOP

回复 2# bailong360


    什么浏览器,发一个试试,我看下是怎么回事

TOP

返回列表