Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file mkdir在指定位置和桌面制作文件_Batch File_Windows 10_For Loop - Fatal编程技术网

Batch file mkdir在指定位置和桌面制作文件

Batch file mkdir在指定位置和桌面制作文件,batch-file,windows-10,for-loop,Batch File,Windows 10,For Loop,我正在制作一个脚本,将使一个文件夹和子文件夹的基础上的模板。我在指定位置创建文件,但它也会拆分桌面上的所有文件 echo off cls echo Type The SO number, Customer, and Job named when asked. Then press Enter echo. set /p SO="SO #: " set /p Customer="Customer Name: " set /p JOB="Job Name: " set folder="%SO%"_"%

我正在制作一个脚本,将使一个文件夹和子文件夹的基础上的模板。我在指定位置创建文件,但它也会拆分桌面上的所有文件

echo off
cls
echo Type The SO number, Customer, and Job named when asked. Then press Enter
echo.
set /p SO="SO #: "
set /p Customer="Customer Name: "
set /p JOB="Job Name: "
set folder="%SO%"_"%Customer%"_"%JOB%"
echo %folder%
set dir="F:\Sales\User 1\_QUOTES"
set final="%dir%\%folder%"
set dst="%final%/1 - Estimating Original Quote Material"
if not exist %final% (
    mkdir "%dst%"
    copy /-Y "%dir%\_takeoff.xlsx" %dst%
    mkdir "%dst%\Downloads"
    mkdir "%dst%\Plans"
    mkdir "%dst%\Quotes"
    mkdir "%dst%\Cut Sheets"
    mkdir "%dst%\Venders"
    mkdir "%final%\2 - Signed Quote - Contract\Non-Current Purchase Orders"
    mkdir "%final%\3 - Special Purchase Trading Goods"
    mkdir "%final%\4 - Engineering\2 - Submittals"
    mkdir "%final%\4 - Engineering\3 - Approvals"
    mkdir "%final%\4 - Engineering\4 - Drawings in Progress\Released Production Drawings"
    mkdir "%final%\5 - Final Production Drawings"
    mkdir "%final%\6 - Q.C. Document"
    mkdir "%final%\7 - Project Management _ Schedule"   
) 
pause

修复并简化了一些内容:

@echo off

echo Type The SO number, Customer, and Job named when asked. Then press Enter.
echo.
set /p "SO=SO #: "
set /p "Customer=Customer Name: "
set /p "JOB=Job Name: "

set "folder=%SO%_%Customer%_%JOB%"
echo %folder%
set "dir=F:\Sales\User 1\_QUOTES"
set "final=%dir%\%folder%"
set "dst=%final%\1 - Estimating Original Quote Material"
if not exist "%final%" (
    md "%dst%" "%dst%\Downloads" "%dst%\Plans" "%dst%\Quotes" "%dst%\Cut Sheets" "%dst%\Venders" "%final%\2 - Signed Quote - Contract\Non-Current Purchase Orders" "%final%\3 - Special Purchase Trading Goods" "%final%\4 - Engineering\2 - Submittals" "%final%\4 - Engineering\3 - Approvals" "%final%\4 - Engineering\4 - Drawings in Progress\Released Production Drawings" "%final%\5 - Final Production Drawings" "%final%\6 - Q.C. Document" "%final%\7 - Project Management _ Schedule"
    copy /-Y "%dir%\_takeoff.xlsx" "%dst%"
) 
pause
  • 从批处理运行时不需要
    cls
    ,除非从其他地方调用批处理
  • 将起始引号移动到
    集合
    变量的开头
  • 修正了
    copy/-Y”%dir%\\u takeoff.xlsx”%est%
    %dst%
    ,因为
    %est%
    没有设置,所以很可能会将
    .xlsx
    文件复制到当前目录中(我猜您正在从桌面运行批处理)
  • 将所有变量置于引号中,除非
  • 将所有
    mkdir
    内容放在一行,并使用
    md
    (做同样的事情)
就我个人而言,如果我制作了那么多文件夹,我可能只会在任何其他命令之前将每个大路径作为变量,或者我会将每一行添加到文本文件中,如下所示:

@echo off

echo Type The SO number, Customer, and Job named when asked - then press Enter.
echo.
set /p "so=SO #: "
set /p "cus=Customer Name: "
set /p "job=Job Name: "

set "fld=%so%_%cus%_%job%"
echo %fld%

set "dir=F:\Sales\User 1\_QUOTES"
set "fin=%dir%\%fld%"

if not exist "%fin%" (
    for /f "usebackq tokens=*" %%A in ("%txt%") do (
        md "%fin%\%%A"
    )
    copy /-Y "%dir%\_takeoff.xlsx" "%fin%\1 - Estimating Original Quote Material\%cus%_takeoff.xlsx"
)

pause
1-估算原始报价材料\下载
1-估算原始报价材料\计划
1-估算原始报价材料\报价
1-估算原始报价材料\切割表
1-估算原始报价材料\供应商
2-已签署报价-合同\非当前采购订单
3-特殊采购贸易商品
4-工程\2-提交资料
4-工程\3-批准
4-工程\4-进行中图纸\发布的生产图纸
5-最终生产图纸
6-Q.C.文件
7-项目管理计划

然后循环遍历,为每个文件夹创建一个文件夹;这将显著地清理你的块,如果你想调整一些东西,你可以在文本文件中添加/删除/修改行。它将使块看起来像这样:

@echo off

echo Type The SO number, Customer, and Job named when asked - then press Enter.
echo.
set /p "so=SO #: "
set /p "cus=Customer Name: "
set /p "job=Job Name: "

set "fld=%so%_%cus%_%job%"
echo %fld%

set "dir=F:\Sales\User 1\_QUOTES"
set "fin=%dir%\%fld%"

if not exist "%fin%" (
    for /f "usebackq tokens=*" %%A in ("%txt%") do (
        md "%fin%\%%A"
    )
    copy /-Y "%dir%\_takeoff.xlsx" "%fin%\1 - Estimating Original Quote Material\%cus%_takeoff.xlsx"
)

pause

参考:,

作为对给出答案的补充,如果您更容易阅读和维护,您也可以通过(使用您的输入,
供应商
,替换为
供应商
)创建目录:

@Echo关闭
设置“dir=F:\Sales\User 1\\u QUOTES”
PushD“%dir%”2>NUL | |退出/B
对于%%A In(SO客户作业),请设置“%%A=”
ClS
Echo在询问时输入SO编号、客户和职务名称。
回音(
设置/P“SO#::”
设置/P“客户=客户名称:”
设置/P“作业=作业名称:”
Rem注意:您应该在这里执行一些输入验证。
设置“final=%SO%\u%Customer%\u%JOB%”
回音(%final%)
设置“dst=%final%/1-估算原始报价材料”
对于%%A In(
%dst%\Downloads
%dst%\Plans
%dst%\Quotes
%dst%\Cut Sheets
%dst%\Vendors
%final%\2-已签署报价-合同\非当前采购订单
%final%\3-特殊采购交易商品
%final%\4-工程设计\2-提交文件
%final%\4-工程\3-批准
%final%\4-工程\4-正在绘制的图纸\已发布的生产图纸
%final%\5-最终生产图纸
%final%\6-Q.C.文档
%final%\7-项目管理计划
)是否执行MD“%%A”2>NUL
如果不存在“%dst%\ \u takeoff.xlsx”如果存在“\u takeoff.xlsx”复制“\u takeoff.xlsx”“%dst%”
暂停

我要再次告诉您,在盲目尝试使用这三个变量创建和传播所有目录之前,您确实需要对用户输入进行验证和验证!

Hi,您说它拆分destkop上的所有文件是什么意思?我将文件夹的一部分发送到Sales文件夹,并发送多个用户桌面上的文件在提交明显未遵循建议的代码之前,您如何访问前面的问题并根据答案中给出的语法修改代码!您是否修复了脚本中的
%est%
部分?我成功了。粘贴时添加了额外的空间。感谢您的帮助elpI知道我应该添加用户输入。不过这只是我为自己制作的一个小脚本。@gizmobrat,没关系,你已经向我们展示了你可以输入错误,如果不合并代码来保护你的命令或系统,那将是鲁莽的。重点是。我添加了这个我发现的快速而肮脏的东西,
for/f“delims=1234567890abcdefghijklmnopqrstuvxyzabcdefghijklmnopqurstvwxyz”%%a in(“%SO%”)do goto:End
@gizmobrat,您需要先检查用户是否输入了内容,然后需要验证他们输入的内容不包含文件系统对象的无效字符,然后确保不使用无效名称,包括带有尾随空格或句点的名称等。检查
%final%
存在,如果存在,您应该很好,如果不尝试,捕获任何错误并相应地采取行动。还值得注意的是,仅仅因为
%final%
存在并不意味着所有子目录都存在,因此我没有将其全部包含在
如果存在
中。