我有很多文件夹,我需要从任何文件夹中删除其中最旧的文件,我需要删除的文件数量改变了任何迭代,所以我试图做一个for循环,在任何迭代中做日期排序,之后我做的文件顶部最旧的文件" skip = variable"这个变量改变了任何迭代,但它不起作用。
有人知道如何在批处理文件中解决它吗? 谢谢!
答案 0 :(得分:1)
解析for /F
命令后,"skip... delims... tokens"
命令(for /F
等)的选项可以不更改。您需要在不同的子例程中更改"skip=!numOfFiles!"
的值,因此每次执行时都会解析for /F
命令:
@echo off
setlocal EnableDelayedExpansion
FOR /F "tokens=1,2 delims= " %%i in ( C:\folder\varibales_file.txt ) do (
set numOfFiles=%%j
pushd %%i
call :Sub !numOfFiles!
popd
)
goto :EOF
:Sub numOfFiles
for /f "skip=%1 delims=" %%F in ('dir "C:\folder_path_to_delete\%%i" /b /o-d') do (
rd /s /q "C:\folder_path_to_delete\%%i\%%F"
)
答案 1 :(得分:0)
我对您的"单行代码"进行了以下更改:
重新格式化为适当且可读的批处理文件
使用numOfOFiles
作为延迟变量(您将其作为无法正常工作的字符串)
用引号括起所有路径/文件名,以正确处理目标或文件名中的空格
delims=
ECHO
。(仅限核心代码,没有检查它是否存在,你想要什么)
@echo off
setlocal enabledelayedexpansion
FOR /F "tokens=1,2 delims= " %%i in (C:\folder\varibales_file.txt) do (
set numOfFiles=%%j
pushd %%i
for /f "skip=!numOfFiles! delims=" %%F in ('dir "C:\folder_path_to_delete\%%i" /b /o-d') do (
ECHO rd /s /q "C:\folder_path_to_delete\%%i\%%F"
popd
)
您确定要使用rd
(删除目录),而不是del
(DELete文件)吗?