我必须重命名服务器上的多个文件。为此,我在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”
编辑:
我有点接近解决方案了。问题是我不能将双引号作为参数传递。我需要使用双引号,因为我的某些文件名包含空格。 如何将那些文件名正确传递给该批处理文件?
答案 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%