首页 > 解决方案 > 如何从批处理脚本中的文件路径中删除最后一个“\”

问题描述

我正在尝试这个,它会在我复制文件的路径(Shift +右键单击>复制为路径)并将其放入批处理文件后计算文件的行,但是....我该如何解决?最后一个\导致%path%问题。

@echo off
Setlocal EnableDelayedExpansion
set /p ifilename=Enter file name:
for %%f in (%ifilename%) do (
set paath=%%~df%%~pf
set ifilename=%%~nf%%~xf
)
echo %paath%
echo %ifilename%

for /f "usebackq" %%a in (`dir /b /s %1 "%paath%"`)  do (
  for /f "usebackq" %%b in (`type %ifilename% ^| find "" /v /c`) do (
set lines= %%b
)
)
echo %lines%
pause

标签: loopsbatch-filedirectory

解决方案


>> %path% 中的最后一个 \ 导致问题
这很容易解决,代码是:

set TempDir=C:\0TEMP
@echo off
md %TempDir%
cd /d  %TempDir%

::------

@echo off
@echo on
Setlocal EnableDelayedExpansion

::set /p ifilename=Enter file name:
SET DUMMYexe=%TempDir%\DUMMY.exe
IF EXIST "%DUMMYexe%" goto ll123
ECHO ---------writing
pause
(
  ECHO pause1
  ECHO pause2
  ECHO pause3
) > %DUMMYexe%
:ll123
SET ifilename=%DUMMYexe%

for %%f in (%ifilename%) do (
set fpath=%%~df%%~pf
set ifilename=%%~nf%%~xf
)
echo %fpath%
echo %ifilename%

SET v=asdf1234
SET vv=\%v%
SET vvv=%fpath%%vv%

CALL SET v=%%vvv:\%vv%=%%
echo 111---%v%

pause
set fpath=%v%


for /f "usebackq" %%a in (`dir /b /s %1 "%fpath%"`)  do (
  for /f "usebackq" %%b in (`type %ifilename% ^| find "" /v /c`) do (
set lines= %%b
)
)
echo %lines%
echo on
pause
goto

当然,如果我使用var 'path',我的win10 会报:
'find' is not Recognized as an internal or external command, operable program or batch file。

顺便说一句,也许你会对下面的代码感兴趣:


SETLOCAL ENABLEDELAYEDEXPANSION
SET count=1
FOR /F "tokens=* USEBACKQ" %%F IN (`dir `) DO (
  SET var!count!=%%F
  SET /a count=!count!+1
)
ECHO -------------- %count%
ECHO
ECHO %var1%
ECHO %var2%
ECHO %var3%
ENDLOCAL
pause

我复制后测试的内容:
如何将命令输出设置为批处理文件中的变量

可以在以下位置找到有关“Setlocal EnableDelayedExpansion”的非常有用的信息:
SETLOCAL 和 ENABLEDELAYEDEXPANSION 如何工作?


推荐阅读