所以,我有一个运行在文件系统中的批处理,并检查其中文件的大小,如果大小为零字节,则使用不同的扩展名重命名它们。这部分很简单,但现在我必须检查当前正在查看的是文件或文件夹。
到目前为止这是我的代码。
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:\Users\nmavis\Desktop\gndjufsb"
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 %%~sg\NUL (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
但是,每当我运行它时,无论它是文件还是文件夹,它都会显示“文件”
答案 0 :(得分:0)
经过一些搜索后,我通过更改此行修复了问题:
for /f %%g in ('dir /b %FTPFOLDER%\%~1') do (if exist %%~sg\NUL (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"))
它不仅可以确定它是文件夹还是文件,而且无论文件系统的深度是多少,它都可以在文件系统中更深入。