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

[文本处理] [已解决]批处理工序的优化

问题一:
  1. set /p "url=url:"
  2. for /f "tokens=1,2,3,5 delims=/?=&" %%i in ("%url%") do (set "a=%%l")
  3. rem 我拿到这个参数 a 通过一条命令生成了一个 a.txt
  4. <这里具体的命令就不写了 调用外部的工具 大佬能看懂就好了> %a% > a.txt
  5. rem 然后我拿到这个命令生成的 txt文件 生成另外一个批处理
  6. for /f "delims=" %%i in (a.txt) do echo %a% %%i>> 1.bat
  7. rem 想省去以下三步,让他直接 执行 for里面的 输出的 内容。
  8. call 1.bat        
  9. del /f /q a.txt
  10. del /f /q 1.bat
复制代码
最后我想问, 能不能优化一下这个过程, 这个 参数a  通过命令生成的 a.txt 能不能用某个东西来代替,不让他生成 a.txt
用一个东西来代替这个"a.txt"中转 。   上文中提到的"a.txt"就是一个中转的作用。
实际我生成1.bat ,还是要 再 del 这个 a.txt  感觉这样写很不优雅
另外 1.bat 能不能也不生成,直接可以执行  for 里面输出的内容吗。


问题二:
  1. rem 这里set的文件是接上面输出的 1.bat 文件  想要合二为一
  2. set File=1.bat
  3. for /f "tokens=1 delims=:" %%a in ('findstr /n "^::CreatUrlEncode::$" "%~0"') do more +%%a "%~0">UrlEncode.vbs
  4. (for /f "delims=" %%a in ('type "%File%"') do (
  5.     for /f "delims=" %%i in ('cscript  /nologo UrlEncode.vbs "%%~a"') do echo %%~i
  6. ))>New$
  7. move /y New$ "%File%" >nul
  8. del /f /q UrlEncode.vbs
  9. goto next
  10. ::CreatUrlEncode::
  11. 'UrlEncode By Demon
  12. Function UrlEncode(str)
  13.     Dim i,c,s,length
  14.     length = Len(str)
  15.     For i = 1 To length
  16.         s = Mid(str,i,1)
  17.         c = "&H" & Hex(AscW(Mid(str,i,1)))
  18.         If ( c >= AscW("A") And c <= AscW("Z") ) Or _
  19.             ( c >= AscW("a") And c <= AscW("z") ) Or _
  20.             ( c >= AscW("0") And c <= AscW("9") ) Or _
  21.             ( c = AscW("-") Or c = AscW("_") Or c = AscW(".") ) Or _
  22.             ( c = Asc(":") Or c = Asc("/") ) Then
  23.             UrlEncode = UrlEncode & s
  24.         ElseIf c = AscW(" ") Then
  25.             UrlEncode = UrlEncode & "+"
  26.         Else
  27.             If c >= &H0001 And c <= &H007F Then
  28.                 UrlEncode = UrlEncode & s
  29.             ElseIf c > &H07FF Then
  30.                 UrlEncode = UrlEncode & "%%" & Hex(&HE0 Or (c\(2^12) And &H0F))
  31.                 UrlEncode = UrlEncode & "%%" & Hex(&H80 Or (c\(2^6) And &H3F))
  32.                 UrlEncode = UrlEncode & "%%" & Hex(&H80 Or (c\(2^0) And &H3F))
  33.             Else
  34.                 UrlEncode = UrlEncode & "%%" & Hex(&HC0 Or (c\(2^6) And &H1F))
  35.                 UrlEncode = UrlEncode & "%%" & Hex(&H80 Or (c\(2^0) And &H3F))
  36.             End If
  37.         End If
  38.     Next
  39. End Function
  40. WScript.Echo UrlEncode(WScript.Arguments(0))
复制代码
这个是url 转码批处理。 我想直接丢到 自己写的批处理里面去用(合二为一)
但是不管用 goto  来执行都报错。必须要丢到外部 用call 来调用这个bat 才可以。
这个url 转码批处理,能不能改改, 可以结合上面那个命令用


-----

谢谢大佬

cmd /c 就可以执行命令
  1. @echo off
  2. set "command=echo 123456789 & dir /b"
  3. for /f "delims=" %%i in ("%command%") do cmd /c "%%i"
  4. pause&exit
复制代码
1

评分人数

    • hxx: 这个写法好牛叉!! 帮我优化了一步工序了技术 + 1

TOP

本帖最后由 hxx 于 2020-4-9 15:36 编辑
cmd /c 就可以执行命令
went 发表于 2020-4-9 13:56


   
    set "command=echo 123456789 & dir /b"
    能不能规定这个  %command%  = 某一个命令输出的值 ,您这边直接规定   command=echo 123456789


set /p command=< *********  【****代表某个命令】   
echo. %command%
pause

我好像这样写并不能成功  显示不出来 这个命令生成的值

TOP

管道貌似只支持单个命令,用&链接的多个命令不行
  1. @echo off
  2. echo dir /b | (
  3. set /p "command="
  4. cmd /V:ON /C !command!
  5. )
  6. pause&exit
复制代码
回复 3# hxx

TOP

返回列表