% userprofile% на .bat не работает - PullRequest
0 голосов
/ 05 июня 2018

Мой скрипт в .bat выглядит следующим образом:

@echo off
mode 34,18
color f0
start /min "" "%userprofile%\Arquivos Extratos"&start CieloTan.iim"
echo.
echo.
echo Extraindo os Extratos...
echo Aguarde...
echo.
echo.
timeout /nobreak /t 300 >nul 2>nul
cls
echo.
echo.
echo Ajustando Arquivo de texto...
echo Aguarde...
echo.
echo.
ren "%userprofile%\Documents\iMacros\Downloads\extract.csv" "extract.txt" >nul 2>nul
move "%userprofile%\Documents\iMacros\Downloads\extract.txt" "%userprofile%\Arquivos Extratos\extract.txt" >nul 2>nul
set "$file=extract.txt"
set "$search=Previsto"
set $repl[2]=TOTAL         
set $repl[3]=Visa            
set $repl[4]=Mastercard  
set $repl[5]=Amex          
set $repl[6]=Sorocred     
set $repl[7]=Elo              
set $repl[8]=Diners         
set $repl[9]=Agiplan       
set $repl[10]=Banescard   
set $repl[11]=Cabal          
set $repl[12]=Credsystem 
set $repl[13]=Hipercard   
set $repl[14]=Credz         
set $repl[15]=Hiper          
setlocal enabledelayedexpansion
set $count=1
(for /f "delims=" %%a in (%$file%) do (
   call:replace "%%a" !$count!
   set/a $count+=1
   )
)> "Futuros Cielo Tan.txt"
echo. >> "Futuros Cielo Tan.txt"
echo ---  FUTUROS CIELO TAN --- >> "Futuros Cielo Tan.txt"
del extract.txt
mkdir "c:\Users\%username%\Desktop\Extratos Banco"
move "Futuros Cielo Tan.txt" "c:\Users\%username%\Desktop\Extratos Banco"
exit/b
:replace
set "$line=%~1"
set $repl=!$repl[%2]!
set "$line=!$line:%$search%=%$repl%!"
echo !$line!
if "%2"=="1" echo.
if "%2"=="2" echo.

Но в следующей части кода есть ошибка:

mkdir "c:\Users\%username%\Desktop\Extratos Banco"
move "Futuros Cielo Tan.txt" "c:\Users\%username%\Desktop\Extratos Banco"

Когда скрипт выполняется, онсоздает папку с именем «Desktop \ Extratos Bancos» в «C: \ Users».Он не распознает мое текущее имя пользователя.Кто-нибудь может мне помочь?


Смотрите изображение ниже, где он создает директой:

Directory tree

1 Ответ

0 голосов
/ 05 июня 2018

Вопреки вашему названию, источником проблемы является username, а не userprofile.

Обычно ОС устанавливает обе эти переменные (среди прочих), и это виднокак плохая практика программирования для изменения их содержимого.

Я подозреваю, что был запущен предыдущий пакет, который изменил username - это привлекательное и значимое имя переменной для использования неопытными дозаторами.

Другойпризнаком неопытности является отсутствие команды setlocal непосредственно после @echo off.В то время как это не обязательное , оно гарантирует, что изменения, внесенные партией в среду, отбрасываются по окончании партии, поэтому они не накапливаются при последующих запусках партии.

Поэтому я бы проверилчто username непусто при запуске этого пакета, поэтому, возможно, добавьте

echo username=%username%
if not defined username echo no username&pause&goto :eof

после @echo off для предупреждения и отмены.

В другом месте в сценарии userprofile - этоиспользуемый.Я не вижу причин для изменения указанных строк на c:\users\%username%, поскольку обычно будет таким же, как %userprofile%.


После публикации соответствующихдеталь:

@ECHO OFF
SETLOCAL
SET "user_name=!M D!"
SET "destdir=U:\destdir"
SETLOCAL ENABLEDELAYEDEXPANSION
DIR /ad "%destdir%"
ECHO ---------------------------------
MD "%destdir%\%user_name%\Banquo's ghost"
DIR /ad "%destdir%"
ECHO ---------------------------------
SETLOCAL DISABLEDELAYEDEXPANSION
MD "%destdir%\%user_name%\Banquo's ghost"
DIR /ad "%destdir%"
ECHO ---------------------------------

GOTO :EOF

Проблема в том, что ваше имя пользователя !M D!, и вы вызвали delayedexpansion, поэтому пакет заменяет значение переменной username (я использовал user_name, так как мне не нравитсяизменяя системные переменные), следовательно, ...!M D!... и затем подставляет значение M D, которое пусто .

Приведенная выше демонстрация дублирует вашу ситуацию, сообщает о текущей попытке создать каталогзатем лекарство - выключить delayedexpansion.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...