首页 > 解决方案 > 需要读取 location.txt 与 Tableau 并使用 '&' 作为字符串处理行,而不是在 .bat 文件中转义

问题描述

我一直在玩同事发给我的代码,这是我遇到的问题。此代码将我登录到 Tableau 并针对我的 Tableau 工作表运行某些位置的名称,如果它在 LOCATION.txt 中找到匹配的名称,它会将 Tableau 中的位置信息 PDF 格式保存到我的 AutomatePars 文件夹中。除了名称中包含 & 的位置之外,所有位置的工作都令人惊叹。所有位置的名称都是从单独的文本文件中提取的(我感兴趣的位置一直在变化),并且所有空格都已被删除。

我需要将每个名称作为字符串读取,即使它们中有“&”。我无法逃避或忘记&,因为该位置的名称中有一个“&”...我尝试过转义,但在我的 PDF 中读到了相同的空值...肯定非常令人沮丧。另一位同事建议创建一些其他变量然后使用替换,但我不知道如何做到这一点......任何帮助将不胜感激,因为我不知道如何解决这个问题!

@echo off
set CUR_YYYY=%date:~10,4%
set CUR_MM=%date:~4,2%
set CUR_DD=%date:~7,2%
set CUR_HH=%time:~0,2%
if %CUR_HH% lss 10 (set CUR_HH=0%time:~1,1%)
set CUR_NN=%time:~3,2%
set CUR_SS=%time:~6,2%
set CUR_MS=%time:~9,2%
set SUBFILENAME=%CUR_YYYY%-%CUR_MM%-%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS%
if exist C:\Users\USER\Automate_Pars\%CUR_YYYY%-%CUR_MM%-%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS% RMDIR /s /Q C:\Users\USER\Automate_Pars\%CUR_YYYY%-%CUR_MM%-%CUR_DD%-%CUR_HH%%CUR_NN%%CUR_SS%
md "C:\Users\USER\Automate_Pars\%SUBFILENAME%"
for /f "tokens=*" %%a in (C:\Users\USER\Automate_Pars\LOCATION.txt) do call :processline %%a
rem using the live database, add “?:refresh=yes” after the URL in order to get the latest snapshot as an output.

    :processline
    tabcmd export "ParForm/ParLevelSheet?Location=%*&:refresh=yes" --pdf --pagelayout landscape --pagesize unspecified -f "C:\Users\USER\Automate_Pars\%SUBFILENAME%\%*.pdf" -t "Moda"
    if EXIST "C:\Users\USER\Automate_Pars\%SUBFILENAME%\.pdf" DEL /F "C:\Users\USER\Automate_Pars\%SUBFILENAME%\.pdf"
    echo "complete"

标签: windowsbatch-filereplacecmd

解决方案


我能提供的最好的是将它变成一个全局变量。

@ECHO OFF
SETLOCAL enableDelayedExpansion
Set "ESC=^"
Set "PrepareVal=text%%ESC%%&other"
CALL :function text%%ESC%%^&other
ECHO Done.
pause
exit

:function
Set "ParamVal=%1"
ECHO !ParamVal!
CALL "%userprofile%\desktop\RecArg.bat"
ECHO Returned
GOTO :EOF

接收 .bat

@Echo OFF
ECHO passed as Variable.
ECHO !ParamVal!
pause
GOTO :EOF

将变量作为参数传递失败。


推荐阅读