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
Windows 使用变量重命名文件_Windows_Batch File_Cmd - Fatal编程技术网

Windows 使用变量重命名文件

Windows 使用变量重命名文件,windows,batch-file,cmd,Windows,Batch File,Cmd,我试图获得一个设置,在那里我可以右键单击文件并选择一个上下文命令。我已经把.bat放进了注册表,诸如此类。我的问题是,我想删除右键单击的文件中的空格,因为我正在使用的另一个程序的命令行似乎与文件名中的空格不兼容 @echo off SET rn="%1" ren %rn% % rn: =% SET input="%1" SET outname="%~d1%~p1%~n1signed.pdf" cd "C:\Program Files (x86)\PDFtk Server\bin" pdftk

我试图获得一个设置,在那里我可以右键单击文件并选择一个上下文命令。我已经把.bat放进了注册表,诸如此类。我的问题是,我想删除右键单击的文件中的空格,因为我正在使用的另一个程序的命令行似乎与文件名中的空格不兼容

@echo off
SET rn="%1"
ren %rn% % rn: =%
SET input="%1"
SET outname="%~d1%~p1%~n1signed.pdf"
cd "C:\Program Files (x86)\PDFtk Server\bin" 
pdftk %input: =% background Z:\Documents\docsig.pdf output %outname: =%
pause
我对配料很不熟悉。也许解决办法很简单?问题是我不希望批处理一次重命名多个文件。我所发现的一切都可以同时运行整个目录

@echo off
setlocal enabledelayedexpansion
for %%a in (* *) do (
  set file=%%a
  ren "!file!" "!file: =!"
)
以上就是这样一个例子。有没有一种方法可以调整它,只改变我右键单击的文件


提前谢谢你

解决方案实际上简单得多:只需使用简短的8.3路径名。短路径名不包含空格。额外的好处:你根本不需要重命名任何文件

下面的批处理脚本显示目录中的所有文件,以说明修改器的使用。您可以轻松地根据自己的需要进行调整:

for %%a in (*.*) do (
  @echo %%~sa
)
在第一个脚本中,您可以删除试图重命名文件的两行,然后改用SET input=%%~s1

批处理参数修饰符记录在。

@ECHO OFF下 SETLOCAL @回音 ::将rn设置为仅参数1的名称和扩展名 设置rn=%~nx1 ::删除空格 设置rn=%rn:=% ::注意ren语法-仅ren全名文件名 ECHOren%~1%rn% ::将inputdir设置为驱动器,并从param1设置路径 设置inputdir=%~dp1 ::将outname设置为仅参数1的名称,然后设置字符串目录,名称为sans spaces+signed.pdf 设置名称=%~n1% SET-outname=%~dp1%outname:=%signed.pdf REM cd C:\Program Files x86\PDFtk服务器\bin ECHOpdftk%inputdir%%rn%background Z:\Documents\docsig.pdf输出%outname% 暂停 所需的REN命令仅用于测试目的。验证命令是否正确后,将ECHOREN更改为REN以实际重命名文件

对pdftk执行相同的操作

我已经注释掉了目录更改,因为我的机器上不存在该目录

文档是文件中的注释


语法SET var=value(其中value可能为空)用于确保分配的值中不包含任何多余的尾随空格。如果你把文件名放在它的命令行上,请不要使用PDFTK。请阅读标签信息,你会注意到它不适用于这里,所以考虑删除它…而且标题的问题需要删除MS-DOS。我从你的标题中删除了MSDOS。没有任何版本的MS DOS具有可用的C:\Program Files x86,因此使用MS DOS的可能性极低。这似乎是Windows批处理文件。ren%rn%%rn:=%这是不正确的,因为%rn%将找到名称中带有空格的变量,该变量不存在。只有在以前未禁用8.3文件名生成功能时,短文件名才可用。我总是有我的disabled@LưuVĩnhPhúc:8.3默认情况下启用文件名创建。如果你这样做了,那么显然这是行不通的。如果你像我一样,关心一个正常运行的系统,你不会关闭8.3文件名创建。除了创建数百万个小文件这一最病态的用例之外,性能的提高是可以忽略不计的。你不能确保在脚本运行的系统上会有8.3个名称。绝对没有理由让它保持启用状态。我已经十年没有面对过任何问题了。无论如何,我想知道这是否是一个错误问题的解决方案。如果您不能简单地将包含空格的长文件名传递给命令(如果您将它们括在引号中),我会非常惊讶,然后问题就消失了。通常,只有旧的16位应用程序不接受文件名中的空格。但是,考虑到这是一个64位操作系统,它不可能是一个16位应用程序。@IInspectable OP的代码显示他试图使用的命令位于C:\Program Files x86目录树下,并且通常仅在64位Windows系统上存在。