批量区分文件和文件夹



所以,我有一个批处理,它通过文件系统运行,并检查其中文件的大小,如果大小为零字节,则使用不同的扩展名重命名它们。这部分很容易,但现在我必须检查当前正在查看的是文件还是文件夹。

这是我到目前为止的代码。

SET FTPFOLDER="C:temp"
rem this goes thru a folder system.
for /f %%f in ('dir /b %FTPFOLDER%') do (call :Search "%%f") 
EXIT /B 0

REM GOES THRU EACH OF THE FILES IN EACH OF THE FOLDERS
:Search
for /f %%g in ('dir /b %FTPFOLDER%%~1') do(call :checkType "%%g", "%FTPFOLDER%%~1%%g", %%~ng  )
pause
EXIT /B 0
:checkType
if exists %~1* (call :Search %~1) else (call :checkSize %~2, %~3)
EXIT /B 0
REM CHECKS IF ZERO 
:checkSize
set file=%~1
@echo %file%
for /f "usebackq" %%h in ('%file%') do set size=%%~zh
if %size% EQU 0 (call :Rename "%file%", %~2)
EXIT /B 0
REM - RENAMES FILE TO .EMPTY
:Rename
ren %~1 %~2.empty 
EXIT /B 0

到目前为止,我尝试过的任何方法都没有奏效。我对批处理非常陌生,因此任何和所有帮助将不胜感激,尤其是解释。

编辑:我觉得同样重要的是要提到没有文件名或文件夹名称会有空格。

编辑:我已经更改了我的代码以删除额外的功能,并在 for 循环中执行此操作。我的新代码如下

SET FTPFOLDER="C:UsersnmavisDesktopgndjufsb"
rem this goes thru a folder system. 
for /f %%f in ('dir /b %FTPFOLDER%') do (call :Search "%%f") 
EXIT /B 0
REM GOES THRU EACH OF THE FILES IN EACH OF THE FOLDERS
:Search
for /f %%g in ('dir /b %FTPFOLDER%%~1') do (if exist %%~sgNUL (echo dir) else (echo file))
pause
EXIT /B 0
REM CHECKS IF ZERO 
:checkSize
set file=%~1
@echo %file%
for /f "usebackq" %%h in ('%file%') do set size=%%~zh
if %size% EQU 0 (call :Rename "%file%", %~2)
EXIT /B 0
REM - RENAMES FILE TO .EMPTY
:Rename
ren %~1 %~2.empty 
EXIT /B 0

但是,每当我运行它时,无论它是文件还是文件夹,它都会显示"文件"

经过一番搜索,我通过更改此行来解决问题:

for /f %%g in ('dir /b %FTPFOLDER%%~1') do (if exist %%~sgNUL (echo dir) else (echo file))

对此:

for /f %%g in ('dir /b %FTPFOLDER%%~1') do (if exist %FTPFOLDER%%~1%%g* (call :Search "%~1%%g")  else (call :checkSize "%FTPFOLDER%%~1%%g", "%%~ng"))

这不仅决定了它是否是文件夹或文件,而且无论您有多少文件深度,它都会正确地在文件系统中更深入。

相关内容

  • 没有找到相关文章