批处理脚本;希望在将输入馈送到变量时从复制粘贴的用户输入中剥离换行标记

Batch script; looking to strip newline tokens from a copy-pasted user input as the input is fed to a variable

提问人:Umbral 提问时间:11/16/2023 更新时间:11/16/2023 访问量:26

问:

我有以下 .bat 脚本(隐藏了一些细节以隐藏敏感信息);目的是让用户运行脚本并能够粘贴一组帐户 ID(通常来自 Excel 文档),然后将这些 ID 处理成 URL,以在新的浏览器选项卡中打开一组选项卡。我选择尝试将其作为 .bat 来执行此操作,以最大程度地减少用户所需的开销(我只需要给他们一个文件即可运行,无需安装任何内容,复制粘贴值,tada!帐户在浏览器中打开)。

@echo off
setlocal EnableDelayedExpansion
title Test script - opens multiple accounts in new browser tabs.
set /p input= Enter account IDs:

set n=0
for %%a in (%input%) do (
    set /A n+=1
    set "accountID[!n!]=%%~a"
)


for /L %%i in (1,1,%n%) do (
    echo %%i- !accountID[%%i]!
    start "" chrome.exe "hidden"!accountID[%%i]!"hidden"
)
pause

如果 ID 是手动键入的,则使用空格作为分隔符,这将按预期完美工作;但是,如果 ID 是从 Excel 粘贴的,则只会处理第一个 ID,因为每个 ID 之后都会引入换行符 (\r\n),因为 ID 是从 Excel 中的列中复制的。

有没有办法解决这个问题/我可以做些什么来去除或忽略数据传入时的换行符?

我在这里和其他网站上查看了几个现有问题;据我所知,他们都没有试图做到这一点,但由于 google-fu 不足,我很可能错过了一些。任何指示或帮助将不胜感激。

据我所知,使用单独的输入文件进行读取很简单,但是我试图最小化用户所需的总步骤(打开单独的文件、粘贴数据、保存文件、运行脚本等)。

我考虑过使用 translate 函数(例如,尝试将 \n 更改为 ' '),但据我所知,这在分配变量时似乎不可行;只有在分配后,当我遇到的问题发生时,这已经过去了。

批处理文件

评论


答:

0赞 Magoo 11/16/2023 #1

[未经测试]

set n=0

:again
set "input="
set /p input= Enter account IDs:
if not defined input goto alldone

for %%a in (%input%) do (
    set /A n+=1
    set "accountID[!n!]=%%~a"
)
goto again

:alldone

我目前没有设施来测试这个。

问题是 - 如何向批处理指示输入已完成。

因此,首先将计数设置为 。0

然后反复将价值化为乌有。读取输入,如果什么都没有,请跳过数字的累积setinput

请注意,如果 just 被“按下”,则变量的值不会被 更改Enterset /p

因此,清除 ,然后请求一个新值。input

请注意,粘贴的输入必须包含下一行(空单元格)。

评论

0赞 Umbral 11/16/2023
这似乎有效!谢谢。最后空单元格/值,然后按一次回车键继续打开选项卡,但按两次回车键似乎也很好用。