Batch file %上的用户配置文件%bat不工作

Batch file %上的用户配置文件%bat不工作,batch-file,Batch File,我在.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 Aj

我在
.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"
当脚本运行时,它正在“C:\Users”中创建一个名为“Desktop\Extratos Bancos”的文件夹。它无法识别我当前的用户名。有人能帮我吗


请参见下图,其中创建了directoy:


与您的标题相反,问题的根源似乎是
username
,而不是
userprofile

通常情况下,操作系统会设置这两个变量(以及其他变量),改变它们的内容被视为糟糕的编程实践

我怀疑之前的批处理已经运行,它改变了
用户名
——对于没有经验的批处理人员来说,这是一个有吸引力且有意义的变量名称

另一个缺乏经验的迹象是在
@echo off
之后直接缺少
setlocal
命令。虽然这不是强制性的,但它确保在批处理结束时放弃批处理对环境所做的更改,以便这些更改不会随着后续批处理的运行而累积

因此,在启动此批处理时,我会检查
username
是否为非空,因此可能需要添加

echo username=%username%
if not defined username echo no username&pause&goto :eof
@echo关闭后
发出警告并中止

脚本中的其他地方使用了
userprofile
。我看不出有任何理由将相关行更改为
c:\users\%username%
,因为这通常与
%userprofile%
相同


张贴相关详情后:

@ECHO关闭
SETLOCAL
设置“用户名=!md!”
设置“destdir=U:\destdir”
SETLOCAL ENABLEDELAYEDEXPANSION
目录/广告“%destdir%”
回音---------------------------------
MD“%destdir%\%user\u name%\Banquo的幻影”
目录/广告“%destdir%”
回音---------------------------------
SETLOCAL DISABLEDELAYEDEXPANSION
MD“%destdir%\%user\u name%\Banquo的幻影”
目录/广告“%destdir%”
回音---------------------------------
后藤:EOF
问题是您的用户名是
!医学博士
并且您已经调用了
delayedexpansion
,因此批处理替换变量
username
的值(我使用了
user\u name
,因为我不喜欢更改系统设置变量),因此
。。。!医学博士
然后替换
md
的值,该值为空


以上演示复制您的情况,报告当前创建目录的尝试,然后固化->代码> DelayeExpExistOff.< /P>可能是DRASS名称上的空白空间…不DOS不喜欢空格…用户名参数是否在命令行上指定为参数?在这种情况下,您需要使用另一种方法来指定正确的参数,请参见此处:如果您打算使用环境变量,该网页也会讨论这些变量。@statosdotcom DOS不支持名称中的空格。但是窗户does@statosdotcom-问题中的代码不是有效的DOS批处理(旧的

for
循环没有
/f
标志),因此这显然是Windows NT批处理,当路径中有引号时,可以使用空格,引号就是。如果在命令提示下输入
Set
,您应该获得当前环境变量及其值的列表。如果
UserName
不是该输出的一部分,那么您应该修复您的环境。它不起作用…有另一种方法可以让bat在我的桌面上创建目录“Extratos Banco”吗?使用%username%或%userprofile%不起作用……遗憾的是,“不起作用”并不能解释太多。是否正在执行
mkdir
mkdir
返回什么?是否创建了错误消息?执行
mkdir
时,变量
username
userprofile
包含什么?它正在“C:\Users”文件夹中创建一个目录“Desktop\Extratos Bancos”。(C:\Users\Desktop\Extratos Bancos)它不会进入我的当前用户并在我的桌面上创建目录。(C:\Users\xxxuserxxx\Desktop\Extratos Bancos)我在我的问题上放了一张图片,显示发生了什么。@William:告诉我们回声“%username%”、%userprofile%”的确切输出。它工作得很好!好!!但我想在另一台计算机上使用它,使用不同的用户名…有一种方法可以让它自动识别用户吗?还可以在用户的桌面上制作目录?谢谢