如何通过浏览弹出窗口设置路径?

2024-01-03

我有下面的脚本,其中有两个路径,一个是目标路径(只有一个),另一个是源路径(变量)。

关于下面的脚本函数:我将每月运行一次,它将转到源路径(10 路径)并复制最新文件,然后复制并重命名到目标路径(所有文件通用)。

注意:从响应源复制的文件应按照脚本重命名,如下所示: “F:\Financial\Data\Reports\AccruntPnLMTD”中的文件应重命名为“PNL.csv”

@echo off
setlocal
set DateFolder=04.2013
set TargetFolder=F:\Financial\Data\%DateFolder%\Final Reports

:: copy the newest file from AccruntPnLMTD and rename it to PNL.csv
call :copyAndRename "F:\Financial\Data\Reports\AccruntPnLMTD" "%TargetFolder%\PNL.csv"

:: copy the newest file from AccountPnlMTD and rename it to AC.csv
call :copyAndRename "F:\Financial\Data\Reports\AccountPnlMTD" "%TargetFolder%\AC.csv"

:: copy the newest file from ExpensesMTD and rename it to EXPMTD.csv
call :copyAndRename "F:\Financial\Data\Reports\ExpensesMTD" "%TargetFolder%\EXPMTD.csv"

:: copy the newest file from ExpensesYTD and rename it to EXPYTD.csv
call :copyAndRename "F:\Financial\Data\Reports\ExpensesYTD" "%TargetFolder%\EXPYTD.csv"

:: copy the newest file from AccrualPnLYTD and rename it to PNLYTD.csv
call :copyAndRename "F:\Financial\Data\Reports\AccrualPnLYTD" "%TargetFolder%\PNLYTD.csv"

:: copy the newest file from AccountYTD and rename it to ACYTD.csv
call :copyAndRename "F:\Financial\Data\Reports\AccountYTD" "%TargetFolder%\ACYTD.csv"

:: copy the newest file from BalanceMTD and rename it to BSMTD.csv
call :copyAndRename "F:\Financial\Data\Reports\BalanceMTD" "%TargetFolder%\BSMTD.csv"

:: copy the newest file from BalanceYTD and rename it to BSYTD.csv
call :copyAndRename "F:\Financial\Data\Reports\BalanceYTD" "%TargetFolder%\BSYTD.csv"

:: copy the newest file from FinancialStmtMTD and rename it to FSMTD.csv
call :copyAndRename "F:\Financial\Data\Reports\FinancialStmtMTD" "%TargetFolder%\FSMTD.csv"

:: copy the newest file from FinancialStmtYTD and rename it to FSYTD.csv
call :copyAndRename "F:\Financial\Data\Reports\FinancialStmtYTD" "%TargetFolder%\FSYTD.csv"


:: Done
goto :eof

:copyAndRename
set SourceFolder=%~1
set TargetFile=%~2

:: Find the newest file in the source folder
for /f "tokens=*" %%F in ('dir /b /od /a-d "%SourceFolder%"') do set "NewestFile=%%F"

:: copy and rename it to the target
copy "%SourceFolder%\%NewestFile%" "%TargetFile%"


:: Done with this subroutine
goto :eof

我想在运行脚本后给出两个路径(弹出窗口应该询问路径)


打扰一下。你的问题不清楚。I assume您想要复制并重命名 10 个给定文件,但不是使用程序中给出的固定路径,而是使用程序运行时给出的可变路径。如果这是正确的,程序必须首先获取目标路径(只有一个),然后获取每个文件的源路径。

下面的批处理文件是实现前面过程的初步版本。如果这个解决方案是您想要的,那么可以添加路径的“浏览弹出窗口”部分,而不是简单的"set /P folder=Enter folder:"命令。或者也许这个版本对你来说已经足够了?

EDIT:我修改了以下解决方案以包含这些新请求:

我有不同客户端的可变目标路径,例如客户端 a 路径将是 F:\Financial\ClientA\Data\%DateFolder%\Final Reports..& 对于客户 B“F:\Financial\ClientB\Data\%DateFolder%\Final Reports”

源路径与客户端 A 路径相同 "F:\Financial\Data\Reports\Client A\AccruntPnLMTD ;对于客户端 B 路径 将是 F:\Financial\Data\Reports\Client B\AccruntPnLMTD.. 文件夹 名称(AccruntPnLMTD、AccruntPnLMTD..etc)将重新命名为相同的 客户

最后编辑:下面的批处理文件已根据本答案最后一段进行了最后一次修改:浏览磁盘中现有的文件夹并选择一个.

@if (@CodeSection == @Batch) @then


@echo off
setlocal

rem Activate the browsing pop-up and ask for TargetFolder
for /F "delims=" %%a in ('CScript //nologo //E:JScript "%~F0" "Select the Target folder"') do (
   set TargetFolder=%%a
)

rem Activate the browsing pop-up and ask for SourceFolder
for /F "delims=" %%a in ('CScript //nologo //E:JScript "%~F0" "Select the Source folder"') do (
   set ClientSourceFolder=%%a
)

rem Process the list of "sourceFolder=fileName" pairs
for %%a in ("AccruntPnLMTD=PNL" "AccountPnlMTD=AC" "ExpensesMTD=EXPMTD" "ExpensesYTD=EXPYTD" "AccrualPnLYTD=PNLYTD"
            "AccountYTD=ACYTD" "BalanceMTD=BSMTD" "BalanceYTD=BSYTD" "FinancialStmtMTD=FSMTD" "FinancialStmtYTD=FSYTD"
           ) do (
   rem copy the newest file from sourceFolder and rename it to fileName.csv
   for /F "tokens=1,2 delims==" %%b in (%%a) do (
      call :copyAndRename "%%b" "%%c"
   )
)

:: Done
goto :eof

:copyAndRename
set SourceFolder=%ClientSourceFolder%\%~1
set TargetFile=%TargetFolder%\%~2.csv

:: Find the newest file in the source folder
for /f "tokens=*" %%F in ('dir /b /od /a-d "%SourceFolder%"') do set 

"NewestFile=%%F"

:: copy and rename it to the target
copy "%SourceFolder%\%NewestFile%" "%TargetFile%"

:: Done with this subroutine
goto :eof


@end


// JScript section

// Creates a dialog box that enables the user to select a folder.
// http://msdn.microsoft.com/en-us/library/windows/desktop/bb774065(v=vs.85).aspx

var shl = new ActiveXObject("Shell.Application");
var folder = shl.BrowseForFolder(0, WScript.Arguments(0), 0, 0);
WScript.Stdout.WriteLine(folder ? folder.self.path : "");

在这个新的解决方案中,您可以SELECT通过批处理文件的参数指定所需的客户端。例如,如果调用批处理文件example.bat,对 ClientS 使用此命令:

example.bat ClientA

你必须注意的是浏览文件夹是一个交互式操作,呈现一个弹出窗口all现有文件夹并允许您选择其中之一。

EDIT: 添加了一些解释

看来这里有一个混乱。在您的问题中,您将以下内容显示为目标和源文件夹的示例:

set TargetFolder=F:\Financial\Data\%DateFolder%\Final Reports

:: copy the newest file from AccruntPnLMTD and rename it to PNL.csv
call :copyAndRename "F:\Financial\Data\Reports\AccruntPnLMTD"

然而,在事后评论你说:

I have variable target path for diffrent clients like for client a path wil be 
F:\Financial\ClientA\Data\%DateFolder%\Final Reports..& for client B
F:\Financial\ClientB\Data\%DateFolder%\Final Reports

same goes in source path like Client A path
F:\Financial\Data\Reports\Client A\AccruntPnLMTD ; for client B Path will be
F:\Financial\Data\Reports\Client B\AccruntPnLMTD..
file folder names (AccruntPnLMTD,AccruntPnLMTD..etc) will reman same for each clients

您必须意识到之前的两种形式是完全不同:在第一个文件夹路径是constant,但在第二个文件夹路径中必须为每个客户进行更改。批处理文件解决方案始终是根据固定要求设计的。这一点在你的回答和评论中都没有明确,所以我以为某些细节以便编写批处理解决方案。我认为有两种方法可以解决这个问题,具体取决于问题是什么:

1- 为每个客户端选择适当的文件夹:在这种情况下,我假设路径文件夹具有以下形式:

目标文件夹由“F:\Financial\”组成,后跟选择每个客户端的可变部分,最后是“\Data\%DateFolder%\Final Reports”。

源路径由“F:\Financial\Data\Reports\”组成,后跟选择每个客户端的变量部分,然后是 10 个不同文件夹中的每一个(AccruntPnLMTD、AccruntPnLMTD ..等)。

If 这就是问题,然后我上面的解决方案就解决了。您只需将所需的文件夹名称作为批处理文件的参数即可。例如,如果客户端a的文件夹名称为“ClientA”,则执行以下命令:

nameOfTheBatchFile ClientA

如果客户端B的文件夹名称为“ClientB”,则执行以下命令:

nameOfTheBatchFile ClientB

如果文件夹名称有空格,请将其用引号引起来;例如,对于“任何其他客户端”执行以下命令:

nameOfTheBatchFile "Any other client"

然而,你后面的评论和坚持使用“浏览弹出窗口”、“询问路径”等术语让我认为前面解释的问题不是你想要解决的问题。还有另一种可能:

2- 浏览磁盘中现有的文件夹并选择一个:在这种情况下,当程序运行时,它会显示一个“浏览弹出”窗口,可以访问磁盘中的所有文件夹,并允许您选择其中任何一个。请注意,浏览窗口不能限制浏览任何特定的名称格式;如果您希望所选文件夹具有某些特征,例如放置在“Data\”部分之后的数据是“MM.YYYY”格式的今天日期或any其他限制,必须进行此检查after用户选择一个文件夹,程序会提示所选文件夹无效,并再次弹出浏览窗口。

我鼓励你clearly解释你的要求。请修改您原来的问题,以便任何人在阅读后都可以理解问题,并且不需要查看所有答案中的所有评论。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过浏览弹出窗口设置路径? 的相关文章

随机推荐

  • MediaWiki,尝试调查 VisualEditor“联系 Parsoid/RESTBase 服务器时出错 (HTTP 500)”

    很多人由于多种不同的原因而遇到相同的错误 因此 在尝试作曲家更新后 我尝试从浏览器开始调查它并逐步重建正在发生的事情 这对我来说真的很难 我非常感谢 PHP 开发人员的帮助 From Chrome Developer Tools I cou
  • 在 Android 应用程序中获取 Google 的搜索结果

    在我的 Android 应用程序中 我想从用户那里获取搜索查询 并使用该查询搜索 google 获取搜索结果并使用搜索结果填充列表 自定义搜索 API 每天的免费搜索次数限制为 100 次 那么有没有其他的搜索方法呢 这是你可以使用的东西
  • 使用普通 Javascript 隐藏所有带有类的元素

    我通常使用document getElementById id style display none 通过 Javascript 隐藏单个 div 是否有一种类似简单的方法来隐藏属于同一类的所有元素 我需要一个不使用 jQuery 的简单
  • 向同一台计算机上的多个客户端发送多播消息

    我正在尝试编写一个服务器 服务 它每秒左右在局域网上广播一条消息 有点像服务发现 该消息需要由以下人员接收 多个客户端程序可能是 在同一台机器上或不同的机器上 机器 但可能不止 每台机器上运行一个程序 同一时间 我正在使用 delphi 7
  • 使用Python提取嵌套括号中的句子

    我有多个 txt目录中的文件 这是一个示例one of my txt files kkkkk select xx xE PUT xx xxxx jdfjhf jhfjj from xxxx x xx L quit 1 xxxxx FROM
  • 有没有办法强制 mongodb 将某些索引存储在 ram 中?

    我有一个具有相对较大索引的集合 但小于可用内存 并查看该集合上 find 的性能以及 htop 给出的系统中的可用内存量 似乎 mongo 没有在内存中存储完整索引 有没有办法强制 mongo 将这个特定索引存储在内存中 查询示例 gt d
  • 如何在 SQL Server 中包含可选的空参数

    我想创建一个存储过程 它在过程的 WHERE 部分有一个可选参数 我的 C 代码可以为此过程传入 null 或有效的产品 ID 这里是 declare ProductID int set ProductID null select from
  • 等待可重入锁中的条件

    以下代码摘自Java文档的Condition http docs oracle com javase 1 5 0 docs api java util concurrent locks Condition html class Bounde
  • 我怎样才能用maven看到jboss控制台

    我用maven2启动了jboss 5 1 0 GA服务器 是否有可能我可以看到控制台中发生了什么 我正在使用 eclipse 插件来运行 Maven 是否可以在 eclipse 或其他地方看到控制台 这就是我所说的控制台的意思 是否可以在某
  • 如果响应为404,如何使用Service Worker缓存跨域资源?

    w3 6 2 跨源资源和 CORS 应用程序倾向于缓存来自 CDN 或其他来源的项目 可以直接使用请求其中许多
  • CGPDF iPhone/iPad 内存问题

    多年来 我一直在努力尝试为 iPhone iPad 制作一个可用的 PDF 阅读器 但它永远不会停止消耗内存 看来所有用CGContextDrawPDFPage绘制的页面都被内部缓存起来 永远不会释放 我不是唯一一个遇到这个问题的人 htt
  • 临时表列列表 (MySQL)

    我需要在 MySQL 中获取某些临时表 MyISAM 的列表列 例如number column name column 我需要知道具有特定名称的列数 事先 我不知道列数是多少 我正在使用动态 sql 和一些变量来创建临时表 我不能使用sho
  • 多重矩阵乘法

    在 numpy 中 我有一个 N 3x3 矩阵的数组 这是我如何存储它们的示例 我正在抽象内容 N 10 matrices np ones N 3 3 我还有一个 3 向量数组 这是一个例子 vectors np ones N 3 我似乎无
  • 失败:Microsoft.AspNetCore.SpaServices[0]

    Asp net core 2 1 Angular 6应用程序 在我的Start cs文件 我们有 app UseSpa spa gt To learn more about options for serving an Angular SP
  • 函数/函子作为模板参数。它们可以存储吗?

    想象我有以下自由函数和函子 void myFreeFunction void cout lt lt Executing free function lt lt endl struct MyFunctor void operator void
  • Java - 调用屏幕键盘

    我正在开发的应用程序将在Windows 7上运行 它将用于通过触摸屏输入一些信息 每当提示用户输入信息时 我需要弹出一个屏幕键盘 我的问题是 我应该从头开始创建一个键盘类还是应该使用 Windows 7 内置屏幕键盘以及如何在 Java 应
  • 具有非标量输出的 Numpy 矢量化函数

    我正在尝试对输出列表的函数进行矢量化 我希望将 numpy 列表中的所有值提供给它 并让它返回一个矩阵 这样每一行都是输入向量中元素的输出 import numpy as np def func x n o for i in range n
  • uiautomator - 当我验证每个列表项中的文本时,无法让 ListView 滚动。当我点击屏幕上的最后一个项目时,它就失败了

    我正在尝试验证 ListView 中每个列表项中的文本 并逐一向下滚动 以便我可以验证每个列表项 但由于某种原因 我无法让它继续滚动列表来验证每个元素 有没有人有幸自动化这种操作 这是我能做到的最接近的 如果这还不够 请告诉我 UiScro
  • Docker 中使用 capybara 和 headless selenium 浏览器进行 Rails 系统测试

    TL DR 关于如何正确配置 capybara 以便能够使用默认的 Rails minitest 系统测试在 docker 容器中驱动远程 selenium 浏览器 您有什么想法吗 我在 dockerized 环境中运行 Rails 现在我
  • 如何通过浏览弹出窗口设置路径?

    我有下面的脚本 其中有两个路径 一个是目标路径 只有一个 另一个是源路径 变量 关于下面的脚本函数 我将每月运行一次 它将转到源路径 10 路径 并复制最新文件 然后复制并重命名到目标路径 所有文件通用 注意 从响应源复制的文件应按照脚本重