Получить полное значение переменной и выполнить tabcmd с помощью командного файла - PullRequest
0 голосов
/ 13 июня 2019

Я работаю над пакетным сценарием, в котором мне нужно собрать все табличные книги в папке и добавить к нему набор аргументов tabcmd publish, а затем выполнить команду publish с помощью tabcmd.

Ниже мой код;

    @ECHO OFF
CLS
ECHO **********************************************************************

SET /p folderPath= "Please enter the folder path where the workbooks are saved: "
ECHO '%folderPath%'
SET /p tabsvr_path= "Please enter path of Tableau Server bin directory: "
ECHO '%tabsvr_path%'
SET /p project_name= "Please enter the project name where the workbooks needs to be saved: "
ECHO '%project_name%'
ECHO **********************************************************************
ECHO *** Get all the txt files from the provided folder                 ***
ECHO **********************************************************************
cd %folderPath%
setlocal enableDelayedExpansion
set /a ID=1
for /f "tokens=1* delims=:" %%G in ('dir *.twb /b') do (
    set filename[!ID!]=%%~G
    set filefullPath[!ID!]=%%~fG
    set /a ID+=1    
)
set filefullPath
set filename
ECHO **********************************************************************
ECHO *** Get all the txt files from the provided folder                 ***
ECHO **********************************************************************
SET TAB_SERVER=http://domain.tableau.com
SET DB_USERNAME=ApplicationUser
SET DB_PASSWORD=@pp!User_!2#
SET TAB_USERNAME=AnalyticsUser
SET TAB_PASSWORD=Password

SET "RUN_CMD=tabcmd "
SET "PUB_SYN=publish ""
SET "FIRST_PARAM=" -n ""
SET "DBUSERNM=" --db-username ""
SET "DBPASS=" --db-password ""
SET WRKBKPROJ= %project_name%
SET "OTHER_PARAMS=" --save-db-password --project ""
SET "PARAM_CLOSE=" --tabbed""

set "x=1"

:SymLoop
if not defined filefullPath[%x%] goto :endLoop
set "EXEC_PATH=%tabsvr_path:"=%"
set "EXEC_PATH=%EXEC_PATH:<=^<%"
set "EXEC_PATH=%EXEC_PATH:>=^>%"
if "%EXEC_PATH:~0,2%"=="C:" (
    if "%EXEC_PATH: =%"=="%EXEC_PATH%" (
      set tabsvr_path=%EXEC_PATH%
    ) else (
      set tabsvr_path=^"%EXEC_PATH%^"
    )
)
REM ECHO %tabsvr_path%
CD /D %tabsvr_path%
ECHO **********************************************************************
ECHO *** Login into Specified Target Tableau Server                     ***
ECHO **********************************************************************
tabcmd login --no-certcheck -s %TAB_SERVER% -u %TAB_USERNAME% -p %TAB_PASSWORD%
ECHO **********************************************************************

CALL SET NEWWRKNAME=%FIRST_PARAM%%%filename[%x%]%%
CALL SET ARGS1=%DBUSERNM%%DB_USERNAME%%DBPASS%%DB_PASSWORD%%OTHER_PARAMS%%TAB_PROJECT%%PARAM_CLOSE%
REM ECHO %ARGS1%
call set ARGS0=%RUN_CMD%%PUB_SYN%%%filefullPath[%x%]%%
REM ECHO %ARGS0%
ECHO %ARGS0%%NEWWRKNAME%%ARGS1%
REM START /b /w /D  %ARGS0%%NEWWRKNAME%%ARGS1%
SET /a "x+=1"
GOTO :SymLoop
:endLoop
echo "Done"
ECHO **********************************************************************
ECHO *** Logout of the Specified Target Tableau Server                     ***
ECHO **********************************************************************
tabcmd logout
ECHO **********************************************************************
pause
endlocal
cd/
cd /D %tabsvr_path%

Ниже приведены проблемы, с которыми я сталкиваюсь.

  • Пароль не передается полностью в переменной. Так как у меня есть "!" отметьте в пароле только текст до "!" передается в переменную.

tabcmd publish "c: \ Tableau Automation \ AC.twb" -n "AC.twb" --db-username "ApplicationUser" --db-пароль "@pp" --save-db-password --project "" --tabbed "

  • Я не могу вызвать команду tabcmd. Я перемещаюсь в папку bin, где у меня есть файл tabcmd exe и вызывает его с помощью START. Однако я получаю сообщение об ошибке, что публикация недействительна Ниже приведен скриншот ошибки;

Error

Может кто-нибудь сообщить мне, как нужно изменить скрипт, чтобы получить полный пароль, а также вызвать tabcmd?

...