Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.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
Windows 如果批处理文件以前的名称存在,如何使其按顺序命名_Windows_Batch File_Cmd - Fatal编程技术网

Windows 如果批处理文件以前的名称存在,如何使其按顺序命名

Windows 如果批处理文件以前的名称存在,如何使其按顺序命名,windows,batch-file,cmd,Windows,Batch File,Cmd,我正在编写一个小程序来获取和保存用户输入,以便我可以引用它来更改库存。它将名称另存为资产更改。如果前一个文件名存在,我如何使它创建一个新的文件名,以便下次运行程序时,输出文件将更改为Asset_Change_1或类似的内容 @echo off set Output="T:\Helpdesk\Documentation\HDI - Help Desk Inventory\Assets to File into 1213" set /p Date_Sent=Date Sent: set /p I

我正在编写一个小程序来获取和保存用户输入,以便我可以引用它来更改库存。它将名称另存为资产更改。如果前一个文件名存在,我如何使它创建一个新的文件名,以便下次运行程序时,输出文件将更改为Asset_Change_1或类似的内容

@echo off
set Output="T:\Helpdesk\Documentation\HDI - Help Desk Inventory\Assets to File into 1213"

set /p Date_Sent=Date Sent: 
set /p Item=Item: 
set /p Model_Number=Model Number: 
set /p Serial_Number=Serial Number: 
set /p Item_Location=Inventory Location: 
set /p Details=Details: 
set /p RMA=RMA Number: 
set /p Repair_Cost=Repair Cost: 
set /p Shipping_Cost=Shipping Cost: 
set /p Date_Received=Date Received: 

echo Date Sent: %Date_Sent% >> %Output%\Asset_Change.txt
echo Item: %Item% >> %Output%\Asset_Change.txt
echo Model Number: %Model_Number% >> %Output%\Asset_Change.txt
echo Serial Number: %Serial_Number% >> %Output%\Asset_Change.txt
echo Item Location: %Item_Location% >> %Output%\Asset_Change.txt
echo Details: %Details% >> %Output%\Asset_Change.txt
echo RMA: %RMA% >> %Output%\Asset_Change.txt
echo Repair Cost: %Repair_Cost% >> %Output%\Asset_Change.txt
echo Shipping Cost: %Shipping_Cost% >> %Output%\Asset_Change.txt
echo Date Received: %Date_Received% >> %Output%\Asset_Change.txt

echo Thank you. This will now close.
pause

每次程序运行时,它都会将更改添加到当前的Asset_Change.txt文件中。我基本上希望它在每次运行时都创建一个全新的文件。

最终的代码应该如下所示:

@echo关闭
setlocal EnableDelayedExpansion
将“输出=T:\Helpdesk\Documentation\HDI-Helpdesk Inventory\Assets”设置为归档到1213中
设置/付款日期\发送日期=发送日期:
设置/p项目=项目:
set/p型号=型号:
设置/p序列号=序列号:
设置/p项目位置=库存位置:
设置/p详细信息=详细信息:
设置/p RMA=RMA编号:
设置/p维修成本=维修成本:
设置/p发货成本=发货成本:
设置/付款日期\接收日期=接收日期:
如果存在“%Output%\Asset\u Change.txt”(
设置“file=Asset\u Change.txt”
)否则(
设置“file=Asset\u Change\u 1.txt”
转到:计算
)
:计算
如果存在“%file%”(
后藤:出去
)否则(
对于/F“tokens=3 delims=uu.”(“%file%”)中的%%A,请设置“num=%%A”
设置/a“num+=1”
设置“file=Asset\u Change\unum!.txt”
)
转到:计算
:出去
(
发送回显日期:%Date\u Sent%
回显项目:%Item%
回显型号:%Model\u Number%
回显序列号:%Serial\u Number%
回显项目位置:%Item\u位置%
回显详细信息:%Details%
回音RMA:%RMA%
回显修复成本:%Repair\u成本%
回送配送成本:%s配送成本%
接收回显日期:%Date\u Received%
)>>“%Output%\%file%”
谢谢。现在将关闭。
暂停
这是我找到的最好的解决办法。我知道它很复杂,但我不能进一步简化它

键入cmd:

  • 获取/?
  • setlocal/?
  • 如果/?
  • 设置/?
  • goto/?

有关使用的命令的详细信息。

有一个简单的解决方案来对文件进行编号。此代码的唯一缺点是,如果有人删除文件2和文件1,并且存在文件3,则会重新创建文件2。我不知道您为什么不选择在文件名中使用日期和时间戳

@echo off
set "Output=T:\Helpdesk\Documentation\HDI - Help Desk Inventory\Assets to File into 1213"

set /p Date_Sent=Date Sent: 
set /p Item=Item: 
set /p Model_Number=Model Number: 
set /p Serial_Number=Serial Number: 
set /p Item_Location=Inventory Location: 
set /p Details=Details: 
set /p RMA=RMA Number: 
set /p Repair_Cost=Repair Cost: 
set /p Shipping_Cost=Shipping Cost: 
set /p Date_Received=Date Received: 

SET "num="
set "us="

:loop
IF EXIST "Asset_Change%us%%num%.txt" (
    set /A "num+=1"
    set "us=_"
    goto loop
)
set "file=Asset_Change%us%%num%.txt"

(
echo Date Sent: %Date_Sent%
echo Item: %Item%
echo Model Number: %Model_Number%
echo Serial Number: %Serial_Number%
echo Item Location: %Item_Location%
echo Details: %Details%
echo RMA: %RMA%
echo Repair Cost: %Repair_Cost%
echo Shipping Cost: %Shipping_Cost%
echo Date Received: %Date_Received%
)>>"%Output%\%file%"

echo Thank you. This will now close.
pause

IF
命令有一个
EXIST
选项,用于检查文件是否已经存在。你可以用它来增加一个数字并循环,直到文件不存在。这似乎无法解决。在接受最终输入后,它只是挂起,不再进一步处理。@ConnorVance这是一个输入错误。你现在能复习一下吗?如果其他东西不起作用,请告诉我。我只知道批处理脚本的基本知识,所以我不知道如何做到这一点,老实说,我甚至没有想过要做到这一点。但是,这听起来是一个更好的方法。我想我可以让它在保存时在文件名的末尾加上一个时间戳?@ConnorVance这会简单得多。如果您的
%date%
变量不包含斜杠并使用连字符,那么它将非常简单:
Asset\u Change\u%date%.txt
。但是大多数人更喜欢用更实用的格式来格式化日期。