如何在C#中使用Process通过批处理重命名文件

时间:2018-09-13 15:17:18

标签: c# batch-file

我必须重命名服务器上的多个文件。为此,我在Visual Studio中创建了一个C#项目。 (附加信息:该项目还必须做其他事情) 现在,我尝试从该项目中调用批处理文件。此批处理文件必须使用旧文件名和新文件名重命名文件。

这是批处理文件中的代码:

@echo off

set FILENAME_OLD="%~1"
set FILENAME_NEW="%~nx2"

ren %FILENAME_OLD% %FILENAME_NEW%
set error=%errorlevel%

echo %error%

这是我的c#项目中的代码:

 process.StartInfo.FileName = location;
 process.StartInfo.Arguments = string.Format("\"{0}\" \"{1}\"", oldfilename, newfilename); 
 process.StartInfo.UseShellExecute = false;
 process.StartInfo.RedirectStandardOutput = true;
 process.Start();
 result = process.StandardOutput.ReadLine();

结果,我总是得到1。这意味着“ ren”无效。我在这里做什么错了?

在我的c#项目中,文件名都采用这样的结构:@“ C:\ test \ test \ test.bat”

编辑:

我有点接近解决方案了。问题是我不能将双引号作为参数传递。我需要使用双引号,因为我的某些文件名包含空格。 如何将那些文件名正确传递给该批处理文件?

1 个答案:

答案 0 :(得分:0)

我以一种“肮脏”的方式设法解决了这个问题:

//I changed newfilename so it's only the filename with extention and not the full path anymore.
string text = "\"" + oldfilename+ "\"" + " " + "\"" + newfilename;

System.IO.File.WriteAllText(@"c:\test\test.txt", text);

process.StartInfo.FileName = location;
process.StartInfo.UseShellExecute = false;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
result = process.StandardOutput.ReadLine();

如您所见,我将参数写入了txt文件,因此引号将被转义。

批处理文件现在很简单:

set /p arguments=<c:\test\test.txt
ren %arguments%
echo %errorlevel%