【发布时间】: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 > temp.txt && set /p URL=< temp.txt && echo %URL%它确实写入了 .txt 文件,但为什么不能将其导入 URL 变量? -
环境变量在循环执行前展开。参见例如stackoverflow.com/a/6500797/886887;您可以使用延迟扩展(根据链接的答案)或使用子例程来解决问题。
-
如此接近!我使用了延迟扩展,我得到了我想要的确切文本,但它被引号包围了。如何仅删除周围的引号,而不是内部的引号?下面的文本被设置为一个名为 TEXT 的变量。我的结果如下:
"if(G11="Akadi",IMAGE(http://i.imgur.com/mr7GBBD.png,3),"
标签: windows batch-file command-line character-limit