dir
我尝试使用以下方式查找文件路径:
cd C:\
dir test.vbs /s /p
它起作用了,并且显示了目录,但是我想在找到文件后自动打开它,所以我尝试了这个:
where /r C:\Users *.vbs
C:\Users
是我放置文件的地方,所以它显示文件路径,但它也显示其他路径。
所以我想使用这样的命令:
where /r C:\Users *.vbs
我如何找到一个文件然后将其放入我的命令中?
那么我最后想要的结果就是这样的:
start "File of a path that has been searched and funded"
答案1
如果您知道您只是在处理.vbs
文件,则应该使用cscript
或类似的。这是一个简单的 Windows 批处理脚本,它将循环遍历目录并执行所有目录:
@echo off
REM -- Check the directory where this script is located
set DIR_TO_CHECK=%~dp0
REM -- Great example from Strawberry Perl's portable shell launcher:
if not "" == "%DIR_TO_CHECK%" if #%DIR_TO_CHECK:~-1%# == #\# set DIR_TO_CHECK=%DIR_TO_CHECK:~0,-1%
set "FILE_PATTERN=%DIR_TO_CHECK%\*.vbs"
echo Checking directory: %DIR_TO_CHECK%
REM -- Make sure there is at least one file of this type before looping through a list
if exist "%FILE_PATTERN%" for /F "tokens=*" %%N in ('dir "%FILE_PATTERN%" /b') do (
echo Running: "%%N"
cscript //Nologo "%%N"
)
echo.
pause
假设每个脚本使用标准输出写入控制台:
Wscript.Echo "Output from A"
输出应类似于:
Checking directory: C:\Users\Documents\My Scripts
Running: "Script A.vbs"
Output from A
Running: "Script B.vbs"
Output from B
如果您想使用默认文件关联,并简单地打开文件,则可以使用start
。此示例使用系统定义的编辑器盲目打开目录中的所有 Microsoft Word 文档:
set "FILE_PATTERN=%DIR_TO_CHECK%\*.docx"
REM -- Make sure there is at least one file of this type before looping through a list
if exist "%FILE_PATTERN%" for /F "tokens=*" %%N in ('dir "%FILE_PATTERN%" /b') do (
echo Opening: "%%N"
start "" "%%N"
)
一些重要说明:
- 使用
dir /b
很重要。不要尝试使用其他会改变输出的参数(尽管对列表进行排序可能没问题)。 - 您需要
dir /b
在for
循环中使用单引号。有时它无需单引号也能正常工作,但如果您输入的内容包含空格或其他非字母字符,批处理脚本可能会在没有警告的情况下崩溃,您会想知道为什么无法对任何内容进行分类。 - `tokens=* 很重要,同样适用于文件名中的非字母字符。有时您可以不用它,但如果您突然有一个带空格的文件名(例如,“New Text Document.txt”),以前运行良好的程序就会突然崩溃。
- 始终使用双引号
%%N
(或%%A
、%%B
或您选择的任何字母)。同样,空格。它们不必有问题,但如果您没有正确引用字符串,完美的程序将崩溃,并且在“New Text Document.txt”的情况下,可能会发出大量警告,例如“无法找到‘New’”、“无法找到‘Text’”、“无法找到‘Document.txt’”。 - 你做不是需要指定
%%N
(或%%A
、%%B
或您选择的任何字母)。但您应该否则,它很快就会让下一个人——或者六个月后的你——感到困惑。
该命令的文档for
可以在这里找到:
https://ss64.com/nt/for.html
https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/for
(嘿,甚至微软的文档中也有一些很好的建议!)