Vha*_*run 67 windows command-line batch-file
有没有办法找出文件是否是目录?
我在变量中有文件名.在Perl中,我可以这样做:
if(-d $var) { print "it's a directory\n" }
Run Code Online (Sandbox Code Playgroud)
Ger*_*ard 85
这有效:
if exist %1\* echo Directory
Run Code Online (Sandbox Code Playgroud)
使用包含空格的目录名称:
C:\>if exist "c:\Program Files\*" echo Directory
Directory
Run Code Online (Sandbox Code Playgroud)
请注意,如果目录包含空格,则必须使用引号:
C:\>if exist c:\Program Files\* echo Directory
Run Code Online (Sandbox Code Playgroud)
也可以表示为:
C:\>SET D="C:\Program Files"
C:\>if exist %D%\* echo Directory
Directory
Run Code Online (Sandbox Code Playgroud)
孩子们在家里尝试这是安全的!
Dav*_*ebb 50
你可以这样做:
IF EXIST %VAR%\NUL ECHO It's a directory
Run Code Online (Sandbox Code Playgroud)
但是,这仅适用于名称中没有空格的目录.当您在变量周围添加引号以处理空格时,它将停止工作.要处理带空格的目录,请将文件名转换为短8.3格式,如下所示:
FOR %%i IN (%VAR%) DO IF EXIST %%~si\NUL ECHO It's a directory
Run Code Online (Sandbox Code Playgroud)
在%%~si
转换%%i
到一个8.3文件名.要查看可以使用FOR
变量执行的所有其他技巧,请HELP FOR
在命令提示符下输入.
(注意 - 上面给出的示例是在批处理文件中使用的格式.要在命令行中使用它%%
,请%
在两个位置替换.)
小智 46
最近因上述不同方法而失败.相当肯定他们过去工作过,也许与dfs有关.现在使用files属性并剪切第一个char
@echo off
SETLOCAL ENABLEEXTENSIONS
set ATTR=%~a1
set DIRATTR=%ATTR:~0,1%
if /I "%DIRATTR%"=="d" echo %1 is a folder
:EOF
Run Code Online (Sandbox Code Playgroud)
Ger*_*ard 12
继我之前的产品之后,我发现这也有效:
if exist %1\ echo Directory
Run Code Online (Sandbox Code Playgroud)
%1周围不需要引号,因为调用者将提供它们.这比一年前的答案节省了一整个击键;-)
这是一个使用FOR构建完全限定路径的脚本,然后推送以测试路径是否是目录.请注意它对于包含空格的路径以及网络路径的工作原理.
@echo off
if [%1]==[] goto usage
for /f "delims=" %%i in ("%~1") do set MYPATH="%%~fi"
pushd %MYPATH% 2>nul
if errorlevel 1 goto notdir
goto isdir
:notdir
echo not a directory
goto exit
:isdir
popd
echo is a directory
goto exit
:usage
echo Usage: %0 DIRECTORY_TO_TEST
:exit
Run Code Online (Sandbox Code Playgroud)
上面的示例输出保存为"isdir.bat":
C:\>isdir c:\Windows\system32
is a directory
C:\>isdir c:\Windows\system32\wow32.dll
not a directory
C:\>isdir c:\notadir
not a directory
C:\>isdir "C:\Documents and Settings"
is a directory
C:\>isdir \
is a directory
C:\>isdir \\ninja\SharedDocs\cpu-z
is a directory
C:\>isdir \\ninja\SharedDocs\cpu-z\cpuz.ini
not a directory
Run Code Online (Sandbox Code Playgroud)
这非常有效
if exist "%~1\" echo Directory
Run Code Online (Sandbox Code Playgroud)
我们需要使用%~1来删除%1中的引号,并在结尾添加反斜杠.然后再将整体放入qutes中.
归档时间: |
|
查看次数: |
113160 次 |
最近记录: |