使用 CMD /c 时如何绕过字符限制?

Posted

技术标签:

【中文标题】使用 CMD /c 时如何绕过字符限制?【英文标题】:How to Bypass Character Limit When Using CMD /c? 【发布时间】:2015-11-27 09:42:34 【问题描述】:

我正在 Windows 7 中编写一个命令行批处理脚本来上传多个图像以进行托管,将 url(使用 this program)和文件名粘贴到一行文本中,然后将文本附加到文件中。

下面的代码给了我一个错误,因为命令“cmd /c”太长了。

@echo on
set DIR1="C:\Users\My\Desktop\temp"
set DIR2="C:\Misc\Programs\EasyImgur"
set DIR3="C:\Users\My\Desktop"

set DIR2=%DIR2:"=%
set DIR3=%DIR3:"=%

forfiles /m *.png /p %DIR1% /c "cmd /c %DIR2%\EasyImgur.exe /anonymous @path && timeout /t 2 /nobreak > NUL && paste > %DIR3%\temp.txt && set /p URL= < %DIR3%\temp.txt && echo if(G9="@fname",IMAGE(%URL%,3), >> %DIR3%\test.txt"

del %DIR3%\temp.txt

pause
exit

有没有办法解决这个问题?有什么方法可以在“cmd /c”之后调用所有文本而不打破字符限制?我需要为目录中的每个文件完成所有这些操作。

提前致谢。

【问题讨论】:

使用 PowerShell 还是 msys? (我不是真的在开玩笑。) 如果您使用for 而不是forfiles,您可以将命令转换为子程序。 (见call /? 好吧,for 工作得更好,因为它没有字符限制。我现在唯一的问题是为什么以下行不从 .txt 导入:paste &gt; temp.txt &amp;&amp; set /p URL=&lt; temp.txt &amp;&amp; echo %URL% 它确实写入了 .txt 文件,但为什么不能将其导入 URL 变量? 环境变量在循环执行前展开。参见例如***.com/a/6500797/886887;您可以使用延迟扩展(根据链接的答案)或使用子例程来解决问题。 如此接近!我使用了延迟扩展,我得到了我想要的确切文本,但它被引号包围了。如何仅删除周围的引号,而不是内部的引号?下面的文本被设置为一个名为 TEXT 的变量。我的结果如下:"if(G11="Akadi",IMAGE(http://i.imgur.com/mr7GBBD.png,3)," 【参考方案1】:

感谢 Harry Johnston 的帮助,我明白了!看看吧。

代码是:

@echo off

setlocal EnableDelayedExpansion

set "DIR1=C:\Users\RyzaJr\Desktop\temp"
set "DIR2=C:\Misc\Programs\EasyImgur"

for %%a in (%DIR1%\*.png) do (

    "%DIR2%\EasyImgur.exe" /anonymous "%%a"
    timeout /t 4 /nobreak > NUL
    paste > temp.txt
    set /p URL= < temp.txt
    echo if(G11="%%~na",IMAGE(!URL!,3^), >> "output.txt"

)

del temp.txt
exit

【讨论】:

【参考方案2】:

这可能对您有用 - 您在文件中回显的术语与括号不匹配。

@echo on
set "DIR1=C:\Users\My\Desktop\temp"
set "DIR2=C:\Misc\Programs\EasyImgur"
set "DIR3=C:\Users\My\Desktop"

for %%a in ("%DIR1%\*.png") do (
  start "" /w /b "%DIR2%\EasyImgur.exe" /anonymous "%%a"
  set "flag="
   for /f "delims=" %%b in ('paste') do (
     if not defined flag >>"%DIR3%\test.txt" echo if(G9="%%~na",IMAGE(%%b,3^),
     set flag=1
   )
)
pause

【讨论】:

你的答案真的很接近工作,但它需要超时,因为它上传到 imgur 的速度不够快,所以 URL 是错误的。是的,我知道不匹配的括号。我是故意这样做的,因为 if() 参数会相互嵌套。 带有 /wait 开关的启动命令应该会停止批处理文件的运行,直到命令完成。可能 easyimgur.exe 的行为不像普通命令行工具应有的行为 - 或者粘贴工具(可能是剪贴板读取实用程序)有问题。但是如果你把 timeout 命令放回去,它是否可以正常工作?

以上是关于使用 CMD /c 时如何绕过字符限制?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Dataset.groupByKey 时如何绕过 2GB 缓冲区限制?

绕过条件格式限制?

仅使用蓝牙时,iOS Multipeer 连接将对等点数量限制为 6 个,无论如何要绕过它?

读取音频时如何绕过音频文件的 CORS 限制?

如何使用 Python 绕过速率限制 ..HTML 错误 1015

怎样绕过ip限制?