for 循环内部设置的变量在外部不可用

for 循环内部设置的变量在外部不可用

我基本上只是想获取驱动器的可用空间(我没有 powershell)。
例如,如果我的 D: 驱动器可用空间超过 15 GB,我将采取任何措施。有趣的是,我编写的脚本在手动运行时运行良好,但在使用调度程序进行调度时则无法正常运行。

我也有设置本地启用延迟扩展在我的脚本开始时,仍然没有运气。

这是我的代码:

for /f "usebackq tokens=1-4 delims=:" %%a in ("Disk_status.txt") do ( echo %%b >TEMP_Size.txt )
for /f "usebackq tokens=1-4 delims=:" %%a in ("Disk_status.txt") do ( set FullFreeSpace=%%b )
for /f "usebackq tokens=1-2 delims=." %%a in ("TEMP_Size.txt") do ( set FreeSpace=%%a )

echo Free Space : %FreeSpace% 

IF %FreeSpace% GTR 15 (
    echo "Space is greater than 15 GB" 
    echo FREE    : %FreeSpace% 
    GOTO TheEnd
)

我在 2003 服务器上运行它。欢迎提出任何最简单的方法来实现逻辑。

答案1

for /f "usebackq tokens=1-4 delims=:" %%a in (`type "Disk_status.txt"`) do echo %%b >TEMP_Size.txt 
for /f "usebackq tokens=1-4 delims=:" %%a in (`type "Disk_status.txt"`) do set "FullFreeSpace=%%b"
for /f "usebackq tokens=1-2 delims=." %%a in (`type "TEMP_Size.txt"`) do set "FreeSpace=%%a"

echo Free Space : %FreeSpace% 

IF %FreeSpace% GTR 15 (
    echo "Space is greater than 15 GB" 
    echo FREE    : %FreeSpace% 
    GOTO TheEnd
)

找到了解决方案:我必须对我使用的所有文件使用绝对路径。
此外,在 for 循环中使用时usebackq,我应该使用``

:: `type <filename>`

这解决了我的问题。

相关内容