【发布时间】:2021-09-08 14:49:37
【问题描述】:
我正在尝试这个,它会在我复制文件路径(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
【问题讨论】:
-
真正的问题是
set path=%%~df%%~pf,它重新定义了预定义的环境变量PATH,这是一个非常重要预定义的Windows Environment Variables,如我在@ 的回答中详细描述的那样987654322@ 确保永远不要在命令提示符窗口set中运行时无意中重新定义其中一个预定义的 Windows 环境变量输出。 -
命令DIR绝对没有问题递归列出指定目录中的所有目录和文件,该目录的路径以反斜杠结尾。但是
cmd.exe在set path=%%~df%%~pf之后搜索名称为find的文件时不再找到%SystemRoot%\System32\find.exe。我建议将此行更改为set "FilePath=%%~dpf"。请打开command prompt,运行for/?,并从第一页顶部到最后一页底部仔细完整地阅读输出帮助。对dir /?和set /?执行相同操作。 -
我会更具体,第一个我是新手,第二个是,如果我输入 C:\tools\xe.txt 这个,
%%~dpf将是C:\tools** 所以如果我把它放在 *path 位置,它会说错误。但是,如果我将 C:\tools 放在路径中它可以工作,所以我需要的是,如何删除最后一个“\”形式,无论路径是什么,制作这个 C:\tools*进入 *C:\tools 或 C:\tools\New folder\New folder* 进入 **C:\tools\New folder\New folder删除反斜杠 -
从不覆盖系统变量
PATH!改用另一个名字!修饰符~p总是返回带有尾随\的路径,但这通常不会造成伤害;如果在特定情况下确实如此,只需附加一个.,因为\abc\.相当于\abc... -
关于如何使用批处理文件的描述对我来说很清楚,但没有关于批处理文件应该做什么的描述。这对于批处理文件编码专家来说通常是没有问题的,但是您的批处理文件有很多错误,至少对我来说不清楚批处理文件应该做什么。
dir /b /s %1 "%path%"的目标是什么?%1引用了传递给批处理文件的第一个参数。没有任何关于使用参数调用批处理文件的文章。
标签: loops batch-file directory