批处理文件行为怪异

问题描述 投票:0回答:1
@echo off
title create backup of currently open folder windows
setlocal enabledelayedexpansion

powershell  @^(^(New-Object -com shell.application^).Windows^(^)^).Document.Folder.Self.Path >> prevfolderpaths.txt

FOR /F "tokens=*" %%f IN (prevfolderpaths.txt) DO (

set "var=%%f"
set "firstletters=!var:~0,2!"

IF "!firstletters!" == "::" ( ECHO start shell:%%~f >> foldersession.bat) ELSE ( ECHO start "" "%%~f" >> foldersession.bat)

)

del "prevfolderpaths.txt"

当 Windows 崩溃时,我使用以下文件作为所有打开文件夹的备份,当我从资源管理器中单击它时,它运行良好,它会创建一个像这样的批处理文件,我可以在之后打开它 文件夹会话.bat

start "" "C:\Users\sscic\Downloads"  
start "" "C:\Windows\symbolic links\New folder" 
start "" "C:\Users\sscic\Downloads" 

当我通过单击它打开它时效果很好,问题是我尝试通过任务计划程序设置它,这样我就可以每隔几分钟备份它,但不起作用,它不会创建文件夹会话 我还尝试通过 explorer.exe C:\Users\sscic xplorer.exe "C:\Windows\symbolic links\Newfolderoldsave.bat" 启动它 无济于事,它让我完全困惑,这里有专业人士有想法吗?

自动化任务时没有创建foldersession.bat

batch-file windows-task-scheduler
1个回答
0
投票

您提交的代码就是我所说的惰性代码。它使用带有相对路径的输出文件,但它没有定义它们的相对位置。当您从任务计划程序运行某些内容时,在任务的配置设置中,您可以输入“开始于”目录的位置,该目录将成为打开时脚本的当前工作目录。

通常,当您未定义当前目录或配置“开始位置”时,默认值将变为

C:\Windows\System32
,我最好的猜测是这就是您的问题。

此外,由于这是一个编程站点,而不是软件配置站点,因此您的代码可以重写以提高效率,不需要中间输出文件,并且只需一行即可完成。

@%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe -NoLogo -NoProfile -Command "@((New-Object -COMObject Shell.Application).Windows()).Document.Folder.Self.Path | ForEach-Object {If ($_.StartsWith('::')) {Write-Output \"@Start Shell:$_\"} Else {Write-Output \"@Start `\"`\" `\"$_`\"\"}} | Out-File '.\FolderSession.cmd' -Encoding OEM"

在上面的代码中,我将您的

.bat
文件扩展名更改为
.cmd
,因为这是本世纪创建的批处理文件的正确扩展名。

© www.soinside.com 2019 - 2024. All rights reserved.