【问题标题】:How to add folder select dialogue to bat file?如何将文件夹选择对话框添加到 bat 文件?
【发布时间】:2021-08-06 21:50:57
【问题描述】:

我有这个 bat 文件,它在给定的目录路径中创建文件夹结构。我只是想以某种方式将路径代码(set /p fd= "Enter Path: ")替换为打开一个对话框的代码,我可以在其中选择文件夹。 谢谢。

@echo off

set /p pr="Enter Project Name: "
set /p fd= "Enter Path: " 
MkDir "%fd%\%pr%\"
MkDir "%fd%\%pr%\%pr%_HD\"
MkDir "%fd%\%pr%\%pr%_HD\01_FILE\"
MkDir "%fd%\%pr%\%pr%_HD\02_ASSETS\"
MkDir "%fd%\%pr%\%pr%_HD\03_LOGS\"
MkDir "%fd%\%pr%\%pr%_UHD\"
MkDir "%fd%\%pr%\%pr%_UHD\01_FILE\"
MkDir "%fd%\%pr%\%pr%_UHD\02_ASSETS\"
MkDir "%fd%\%pr%\%pr%_UHD\03_LOGS\"

【问题讨论】:

标签: file batch-file directory subdirectory


【解决方案1】:

这是一个快速的 示例,无需解释,因为您在技术上只是请求代码

0</* :
@Set "pr=test"
@Set /P "pr=Enter Project Name: "
@For /F "Delims=" %%G In ('%SystemRoot%\System32\cscript.exe //E:JScript //NoLogo "%~f0" 2^>NUL ^| %SystemRoot%\System32\find /V ""')Do @For %%H In ("HD" "UHD") Do @For %%I In ("01_FILE" "02_ASSETS" "03_LOGS") Do @MD "%%G\%pr%\%pr%_%%~H\%%~I"
@Exit /B */0;
var Folder=new ActiveXObject('Shell.Application').BrowseForFolder(0,'Select your directory.',1,'0');
try{new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1).Write(Folder.Self.Path)};catch(e){};close();

您应该知道,您的代码并因此无法确定最终用户是否输入了在 Windows 中允许作为目录名称的字符串。 我也预先设置了一个字符串值test,所以如果你的最终用户没有在Enter Project Name提示符下提供输入,它至少会为你创建一些目录。

【讨论】:

  • 按预期工作的人..谢谢! ...也感谢您在测试中执行的额外行...这有帮助
  • @Maclad,我很高兴它对你有用。请阅读What should I do when someone answers my question? 以了解您当前的选择。
  • 嘿@compo 有可能得到这样的布局吗? i.stack.imgur.com/Iuvqm.png
  • 它很可能是 @Maclad ,但由于您的问题仅提供了一个规范,而我提供了一个可以做到这一点的答案,并且您已经说过它可以按预期工作。我不会不费吹灰之力地为您编写更多代码。这不是订购服务的代码,我已经超出了本网站对您的真实范围,您再次要求我这样做是不礼貌的。
【解决方案2】:

如果您希望 GUI 选择文件夹,您可以调用 Powershell。这两个中的任何一个都应该适合你。

set "psCommand="(new-object -COM 'Shell.Application').BrowseForFolder(0,'Please choose your SOURCE folder.',0x010,17).self.path""
for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "location=%%I
echo %location%
pause

--

set "psCommand="(new-object -COM 'Shell.Application').BrowseForFolder(0,'Please choose the folder.',0,0).self.path"" 
for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "folder=%%I"
echo %folder%
pause

这是您的代码与我的代码合并。我假设您不会这样做,因为这是经过测试和验证的。

@echo off
set /p pr="Enter Project Name: "
set "psCommand="(new-object -COM 'Shell.Application').BrowseForFolder(0,'Please choose your SOURCE folder.',0x010,17).self.path""
for /f "usebackq delims=" %%I in (`powershell %psCommand%`) do set "fd=%%I

MkDir "%fd%\%pr%\%pr%_HD\01_FILE\"
MkDir "%fd%\%pr%\%pr%_HD\02_ASSETS\"
MkDir "%fd%\%pr%\%pr%_HD\03_LOGS\"
MkDir "%fd%\%pr%\%pr%_UHD\01_FILE\"
MkDir "%fd%\%pr%\%pr%_UHD\02_ASSETS\"
MkDir "%fd%\%pr%\%pr%_UHD\03_LOGS\"

【讨论】:

  • 嘿,谢谢您的回复...这段代码是在父目录而不是子目录中制作文件。
  • @Maclad 此代码不会创建目录。它将您选择的文件夹分配给一个变量。使用它创建的变量。
  • 是的,我正在使用创建的变量,但它仍然在父目录中生成..e.g.我正在选择路径 D:\new\test\ 但文件是在 D:\new\
  • @Maclad mkdir 命令是什么样子的?
  • 我是新手,但我想这就是你需要的 MkDir "%folder%%pr%\" 我正在使用的完整蝙蝠在这里 [pastebin.com/5b1vEqNn]
猜你喜欢
  • 1970-01-01
  • 2011-04-29
  • 2015-11-29
  • 2020-11-24
  • 2017-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-05
相关资源
最近更新 更多