.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"的文件夹。 in" C:\ Users"。它无法识别我当前的用户名。有人能帮助我吗?
见下图,它创建了directoy:
答案 0 :(得分:1)
与您的标题相反,它是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
。