2015-04-27 4 views
6

Я пытаюсь использовать PowerShell с C# для создания нового файла на рабочем столе. В терминале вы могли бы сделать:C# PowerShell создает пустой текстовый файл на рабочем столе

cd desktop 
$null >> newfile.txt 

Так что я пытаюсь сделать это в C#, чтобы имитировать предыдущие заявления:

using (PowerShell PowerShellInstance = PowerShell.Create()) 
{ 
    PowerShellInstance.AddScript("cd desktop; $null >> newfile.txt"); 

    PowerShellInstance.Invoke(); 
} 

Это работает без каких-либо исключений, но файл не создан рабочий стол. Может ли кто-нибудь указать, что я делаю неправильно с AddScript?

EDIT

Похоже, проблема возникает с помощью компакт-диска, а затем создать в последовательности.

Я был в состоянии заставить его работать, делая

PowerShellInstance.AddScript("$null >> C:\\users\\me\\Desktop\\newfile.txt"); 

Если кто-нибудь знает, как сделать команду кд следует другой, пожалуйста, дайте мне знать.

+0

Просто уточнить: вы специально хотите использовать PowerShell для этого? Вместо этого вы не хотите использовать C# File? – Rup

+1

Да, я в основном тестирую, как делать вещи в PowerShell с C#, так как позже я буду использовать его для запуска git-команд. – Nived

+0

@Nived Извините, но я бы никогда не сделал этого в консоли (redirect '$ null'), чтобы создать новый файл. 'New-Item $ HOME \ Desktop \ newfile.txt' –

ответ

1

Мне кажется, что команда cd desktop сама не работает. Если вы откроете консоль PowerShell, то путь по умолчанию, который он открывает, равен C:\Users\user_name\, и, скорее всего, из C# он не открывается с этим путем, а вместо этого открывается с рабочим каталогом, являющимся папкой отладки вашего текущего проекта; [комментирует @Nived]

Нет проблем с вашим текущим кодом. Просто измените оператор скрипта ниже, и он должен работать нормально

cd C:\Users\user_name\desktop; $null >> newfile.txt 

С, что ваш C# код должен быть что-то вроде

using (PowerShell PowerShellInstance = PowerShell.Create()) 
{ 
    PowerShellInstance.AddScript(@"cd C:\Users\user_name\desktop; $null >> newfile.txt"); 

PowerShellInstance.Invoke(); 
} 
+0

Он отправляется в папку отладки вашего текущего проекта, из которого вы выполняете, чтобы начать. Поэтому вам нужно указать полный путь или использовать '~' для этого. – Nived

+0

@Nived, приятно знать. Вы можете отредактировать мой ответ и включить эту информацию, если хотите. – Rahul

+1

В .NET вы также можете использовать такие материалы, как «Environment.GetFolderPath (Environment.SpecialFolder.DesktopDirectory)», чтобы получить полный путь к папке, где находятся элементы «Desktop». –

0

Вы можете использовать переменные окружения, чтобы найти на рабочем столе, а также.

using (PowerShell PowerShellInstance = PowerShell.Create()) 
{ 
    PowerShellInstance.AddScript(@"cd (Join-Path (Join-Path $env:HOMEDRIVE $env:HOMEPATH) desktop); $null >> newfile.txt"); 

    PowerShellInstance.Invoke(); 
} 
Смежные вопросы