提问人:Umbral 提问时间:11/16/2023 更新时间:11/16/2023 访问量:26
批处理脚本;希望在将输入馈送到变量时从复制粘贴的用户输入中剥离换行标记
Batch script; looking to strip newline tokens from a copy-pasted user input as the input is fed to a variable
问:
我有以下 .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 更改为 ' '),但据我所知,这在分配变量时似乎不可行;只有在分配后,当我遇到的问题发生时,这已经过去了。
答:
[未经测试]
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
然后反复将价值化为乌有。读取输入,如果什么都没有,请跳过数字的累积set
input
请注意,如果 just 被“按下”,则变量的值不会被 更改。Enterset /p
因此,清除 ,然后请求一个新值。input
请注意,粘贴的输入必须包含下一行(空单元格)。
评论